python - 具有多处理功能的 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)
请让我知道如何使它与多进程一起使用?或者,如果您有类似的模块可以工作。谢谢!!!
解决方案
推荐阅读
- php - 查询返回 null 并期望 1
- amazon-web-services - VPC 中的默认安全组
- python - 如何检查某人是否是管理员[Python中的Discord bot]
- dart - Named parameter with underscore in Dart class
- hibernate - Hibernate - 如何在 JSONB 列中保存 Json 字符串
- c - C中局部变量的自动初始化
- android - 正在创建通知但未在 android 中弹出(在 Pie 中)
- c++ - 如何加载带后缀的库
- node.js - 使用 ES7 和 babel 调试 nodejs 代码时 VS 代码中的异常
- ios - 如何快速将文本字段的文本带到渐变背景的前面