Порождение процесса в потоке вызывает ZMQError: Прерванный системный вызов - PullRequest
0 голосов
/ 03 октября 2018

У меня многопоточный, многопроцессорный код.Действие происходит внутри потока, вызываемого в цикле каждые 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

...