多处理目标是 运行 在父进程中,而不是顺序
multiprocessing targets are run in the parent process instead, sequentially
我有一个功能 orderbook(pair)
打开一个 websocket,订阅一个频道并监听消息。我希望能够订阅多个频道并并行收听消息。有什么办法吗?
截至目前,我正在尝试以下操作:
from dev.orderbook import *
from multiprocessing import Process
def main():
process01 = Process(target=orderbook('BTC-USD'))
process02 = Process(target=orderbook('ETH-USD'))
process01.start()
process02.start()
if __name__ == '__main__':
main()
然而,所有这一切都是 运行 process01
并且只有当我停止脚本时它才会 运行s process02
。这不是我要寻找的行为。有什么方法可以同时订阅这两个频道并同时收听和打印 messages/responses 吗?如果没有,那么有什么方法可以启动一个进程 - 让它 运行 指定时间然后启动下一个进程?
我的 websocket 镜像如下:
import websocket
class orderbook(object):
def __init__(self, pair):
self.pair = pair
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://echo.websocket.org/",
on_message = self.on_message,
on_error = self.on_error,
on_close = self.on_close)
ws.on_open = self.on_open
ws.run_forever()
def on_message(self, ws, message):
print(message)
def on_error(self, ws, error):
print(error)
def on_close(self, ws):
print("### closed ###")
def on_open(self, ws):
ws.send(self.pair)
您的 Process
构造函数包括对目标函数的实际调用。因此,在父进程中,在评估构造函数行的过程中调用该函数,并将结果作为 target
.
传递给 Process()
您应该传递函数本身,并单独传递其参数:
process01 = Process(target=orderbook, args=('BTC-USD',))
我有一个功能 orderbook(pair)
打开一个 websocket,订阅一个频道并监听消息。我希望能够订阅多个频道并并行收听消息。有什么办法吗?
截至目前,我正在尝试以下操作:
from dev.orderbook import *
from multiprocessing import Process
def main():
process01 = Process(target=orderbook('BTC-USD'))
process02 = Process(target=orderbook('ETH-USD'))
process01.start()
process02.start()
if __name__ == '__main__':
main()
然而,所有这一切都是 运行 process01
并且只有当我停止脚本时它才会 运行s process02
。这不是我要寻找的行为。有什么方法可以同时订阅这两个频道并同时收听和打印 messages/responses 吗?如果没有,那么有什么方法可以启动一个进程 - 让它 运行 指定时间然后启动下一个进程?
我的 websocket 镜像如下:
import websocket
class orderbook(object):
def __init__(self, pair):
self.pair = pair
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://echo.websocket.org/",
on_message = self.on_message,
on_error = self.on_error,
on_close = self.on_close)
ws.on_open = self.on_open
ws.run_forever()
def on_message(self, ws, message):
print(message)
def on_error(self, ws, error):
print(error)
def on_close(self, ws):
print("### closed ###")
def on_open(self, ws):
ws.send(self.pair)
您的 Process
构造函数包括对目标函数的实际调用。因此,在父进程中,在评估构造函数行的过程中调用该函数,并将结果作为 target
.
Process()
您应该传递函数本身,并单独传递其参数:
process01 = Process(target=orderbook, args=('BTC-USD',))