Питон-обертка отправить &амп; получать за трубы() многопроцессорная обработка?
У меня есть оболочка python, содержащая некоторый код c++. В нем есть функция, которую я настраиваю как процесс из моего кода python. Это утверждение while, что мне нужно настроить условие для того, когда он должен закрыться.
утверждение while более или менее таково
while(TERMINATE == 0)
У меня есть данные, которые отправляются обратно из цикла while. Я использую pipe() для создания объектов " in " и "out". Я посылаю объект "out" в функцию, когда создаю процесс.
self.stream = Process(target=fxn, args=(self.outPipe,))
находясь внутри оболочки, я могу отправлять данные обратно в скрипт python с помощью
PyObject *send = Py_BuildValue("s", "send_bytes"); PyObject_CallMethodObjArgs(pipe, send, temp, NULL);
Это работает просто отлично.
Однако у меня возникли проблемы с отправкой сообщения в код C++ в оболочке, которое говорит циклу остановиться.
Что я уже пробовал:
То, что я решил сделать, это просто проверить poll(). Когда система видит, что есть входящий сигнал от скрипта python, она устанавливает TERMINATE = 1. поэтому я написал это.
PyObject *poll = Py_BuildValue("p", "poll");
p (bool) [int] Tests the value passed in for truth (a boolean predicate) and converts the result to its equivalent C true/false integer value. Sets the int to 1 if the expression was true and 0 if it was false. This accepts any valid Python value. See Truth Value Testing for more information about how Python tests values for truth.
Поскольку я ожидаю true или false от функции python poll(). Я решил, что "p" будет идеальным, так как он преобразует true в 1 и false в 0.
в петле у меня есть
if(PyObject_CallMethodObjArgs(pipe, poll, NULL, NULL)) TERMINATE = 1;
Я хотел использовать poll() в качестве его неблокирующего, как recv (). Таким образом, я мог бы просто заняться своей другой работой и проверять poll() один раз в цикл.
однако, когда я посылаю сигнал из скрипта python, он никогда не срабатывает.
self.inPipe.send("Hello");