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