gpt4 book ai didi

python zerorpc和多处理问题

转载 作者:行者123 更新时间:2023-12-03 12:22:59 25 4
gpt4 key购买 nike

我正在 Electron 应用程序和 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 上下文,否则多处理将意外继承。

关于python zerorpc和多处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52130461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com