[英]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.