繁体   English   中英

python zerorpc和多处理问题

[英]python zerorpc and multiprocessing issue

我正在电子应用程序和python后端之间实现双向乒乓演示应用程序。

这是导致问题的python部分的代码:

import sys
import zerorpc
import time
from multiprocessing import Process

def ping_response():
    print("Sleeping")
    time.sleep(5)
    c = zerorpc.Client()
    c.connect("tcp://127.0.0.1:4243")
    print("sending pong")
    c.pong()

class Api(object):    
    def echo(self, text):
        """echo any text"""
        return text

    def ping(self):

        p = Process(target=ping_response, args=())
        p.start()
        print("got ping")
        return

def parse_port():
    port = 4242
    try:
        port = int(sys.argv[1])
    except Exception as e:
        pass
    return '{}'.format(port)

def main():
    addr = 'tcp://127.0.0.1:' + parse_port()
    s = zerorpc.Server(Api())
    s.bind(addr)
    print('start running on {}'.format(addr))
    s.run()

if __name__ == '__main__':
    main()

每次从javascript端调用ping()时,它将启动一个新的过程,该过程模拟一些工作(睡眠5秒),并通过在nodejs服务器上调用pong进行响应以指示工作已完成。

问题是pong()请求永远不会到达javascript端。 如果不是使用_thread创建新线程并在ping_response()中执行相同的代码,而没有产生新的进程,则pong请求将到达javascript端。 另外,如果我手动运行bash命令zerorpc tcp://localhost:4243 pong我可以看到nodejs脚本收到了pong请求,因此javascript端的服务器正常运行。

当我创建一个新进程并且无法发送请求时,zerorpc客户端会发生什么?

谢谢。

编辑似乎卡在c.pong()中

尝试使用gipc.start_process()gipc模块(通过PIP)代替multiprocessing.Process() 它创建了一个新的gevent上下文,否则它将被多进程意外继承。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM