我正在电子应用程序和 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()