首页 > 解决方案 > 具有多处理功能的 Websocket

问题描述

我最近遇到了多处理 websockets 的问题。与线程一起使用conn.run,不会导致任何错误。

p = threading.Thread(target=conn.run, daemon=False, args=(streams,))
p.start()        
print(p) 

但是当我通过multiprocess模块做到这一点时,

#t = multiprocess.Process(target=conn.run, args=(streams,))
#t.start()
#print(t)

我收到此错误:

root:error while consuming ws messages: [Errno 9] Bad file descriptor

我更喜欢使用multiprocess模块的原因是因为它可以被终止,并且由于某种原因它比线程更容易处理。请看下面的完整代码:

import threading
import multiprocess
import multiprocessing
from time import sleep



import alpaca_trade_api as tradeapi
import pandas as pd

base_url = 'https://paper-api.alpaca.markets'
data_url = 'wss://data.alpaca.markets'
trade_taken = False

# instantiate REST API
global api
api = tradeapi.REST('insert your key',
                    'insert-secret-key', base_url=base_url, api_version='v2')

    # init WebSocket
global conn
conn = tradeapi.stream2.StreamConn(
       'insert your key', 'insert-secret-key', data_url=data_url, data_stream='alpacadatav1')

  
@conn.on(r'^Q.AAPL$')
async def on_second_bars_EWN(conn, channel, bar):
        print(bar)
       
@conn.on(r'^Q.BAC$')
async def on_second_bars_ENZL(conn, channel, bar):
                    print(bar)
                

#Multiprocess gives an error: ERROR:root:error while consuming ws messages: [Errno 9] Bad file #descriptor   
streams = ['Q.AAPL', 'Q.BAC']
#t = multiprocess.Process(target=conn.run, args=(streams,))
#t.start()
#print(t)

 # Threading works fine. You can comment here and uncomment above.

p = threading.Thread(target=conn.run, daemon=False, args=(streams,))
p.start()        
print(p)

请让我知道如何使它与多进程一起使用?或者,如果您有类似的模块可以工作。谢谢!!!

标签: pythonmultithreadingwebsocketmultiprocessing

解决方案


推荐阅读