C++/Python обрабатывает IPC с FIFO: невозможно прочитать дважды подряд из PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 C++/Python обрабатывает IPC с FIFO: невозможно прочитать дважды подряд из Python

Сообщение Anonymous »

У меня возникли проблемы при попытке заставить процесс C++ взаимодействовать с процессом Python через FIFO.

Эти процессы используют двустороннюю связь через 2 FIFO: p>
  • C++ записывает в pythonread_fifo и наоборот, Python читает из него
  • процесс Python записывает в cppread_fifo и наоборот, C++ читает оттуда
Идея состоит в том, чтобы оба процесса записывали и читали в каждом цикле.
Питон пишет "гав", а C++ пишет "шарлатанство".

Если один из двух процессов быстрее другого (например, C++ выполняет 3 цикла, пока Python все еще работает застрял на первом), то я ожидаю, что другой не понесет потери данных (в моем примере питон получит крякряк).

Мой код работал до тех пор, пока Я попытался запустить процесс Python дважды подряд, пока C++ был завис, что вызвало ошибку:


BlockingIOError: [Errno 11 ] Ресурс временно недоступен в строке 24: os.read(fd[0], 20)


Вот код; обратите внимание, что только процесс Python вызывает mkfifo, поскольку это желаемое поведение в проекте:

pipe.cpp

Код: Выделить всё

#define MAX_BUF 1024

const char * write_path = "python_cpp_comms/pythonread_fifo";
const char * read_path =  "python_cpp_comms/cppread_fifo";

int main(int argc, char**argv)
{
int fd[2];
char buf[MAX_BUF];

printf("Opened\n");
fd[1] = open(write_path, O_RDWR);
fd[0] = open(read_path, O_RDONLY | O_NONBLOCK);
int cycle = 1;
for(;;) {
printf("Cycle: %d\n",cycle++);
int out = write(fd[1], "quack", 5);
printf("Written %d bytes errno=%d:\n", out, errno);
int in = read(fd[0], buf, MAX_BUF);
printf("Received %d bytes errno=%d: %*.*s\n", in, errno, in,in, buf);
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/62447013/c-python-processes-ipc-with-fifo-cant-read-twice-in-a-row-from-python[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»