Почему происходит сбой вложенного мультипроцессора с ZeroRPC? - PullRequest
0 голосов
/ 10 января 2019

У меня возникла проблема при попытке создания вложенных процессов, обменивающихся данными через ZeroRPC. Это никогда не пройдет дальше первого процесса. Дочерний процесс создан, но ZeroRPC не может связаться с ним, поскольку кажется, что вызов заблокирован. Есть идеи почему? Работает на Linux

Обобщенный код, представляющий проблему ниже.

test.py:

import time
from multiprocessing import Process
import zerorpc
from fooserver import fooserver
from foo import Foo

port = int(str(time.time())[-5:]) + 5000
fooserver_process = Process(target=fooserver, args=(Foo(), port, ))
fooserver_process.start()
foo_client = zerorpc.Client(heartbeat=None)
foo_client.debug = True
foo_client.bind('tcp://*:%s' % port)
foo_client.test(port)
foo_client.nest()


fooserver.py:

import zerorpc
def fooserver(stuff, port):
    s = zerorpc.Server(stuff, heartbeat=None)
    s.debug = True
    s.connect("tcp://127.0.0.1:%s" % port)
    s.run()


foo.py:

from fooserver import fooserver
from multiprocessing import Process
import zerorpc
import time

class Foo():
    def __init__(self):
        self.child = int(str(time.time())[-5:]) + 5000

    def test(self, port):
        print('# HELLO FROM FOO WITH CHILD {0} on port {1} #'.format(self.child, port))

    def nest(self):
        fooserver_process = Process(target=fooserver, args=(Foo(), self.child, ))
        fooserver_process.start()
        foo_client = zerorpc.Client(heartbeat=None)
        foo_client.debug = True
        foo_client.bind('tcp://*:%s' % self.child )
        foo_client.test(self.child)
        foo_client.nest()
...