簡體   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