У меня многопоточный, многопроцессорный код.Действие происходит внутри потока, вызываемого в цикле каждые 5 секунд (реактор LoopingCall
).функция основного действия порождает multiprocessing.Process
, который не взаимодействует с библиотекой zeromq.Как-то порождение этого процесса приводит к
ZMQError: Прерванный системный вызов
, изменяющий multiprocessing.Process
на threading.Thread
, решает проблему.Я видел, что у других возникали проблемы при совместном использовании контекста между потоками / процессами, но я понятия не имею, почему у меня такая проблема.ниже приведен простой псевдокод, показывающий проблему.
class Worker:
def action(self):
# do stuff
stuff = request_stuff_from_zmq_replier()
p = Process(target=something_totaly_zmq_free, arg= (stuff, ))
p.start()
# do other stuff
p.join()
# finish the action
def main():
w = Worker()
ctrl_loop = LoopingCall(self.w.action)
ctrl_loop.start(5).addErrback(end_gracefully)
ОС: (докер) Ubuntu 16.04, Python 2.7