Python 3.x 如何在多个线程中接收WebSocket

Python 3.x 如何在多个线程中接收WebSocket,python-3.x,websocket,async-await,Python 3.x,Websocket,Async Await,我正在使用库websockets 当尝试从多线程中接收WebSocket的函数接收数据时,我得到一个错误。我受不了。我需要你的帮助 我的代码: async def receive_ws(): 与websocket异步。连接(uri,额外的\u头=有效的\u头)作为websocket: 尽管如此: 结果=等待websocket.recv() 打印(结果) 异步定义流(): 列表_流=[] 对于范围(0,100)内的i: 列表_streams.append(str(i)) 对于列表_流中的j: 等

我正在使用库
websockets

当尝试从多线程中接收WebSocket的函数接收数据时,我得到一个错误。我受不了。我需要你的帮助

我的代码:

async def receive_ws():
与websocket异步。连接(uri,额外的\u头=有效的\u头)作为websocket:
尽管如此:
结果=等待websocket.recv()
打印(结果)
异步定义流():
列表_流=[]
对于范围(0,100)内的i:
列表_streams.append(str(i))
对于列表_流中的j:
等待asyncio.to线程(接收线程)

run(streams())
您可以使用asyncio收集要运行的协同例程列表。下面是一个使用异步睡眠在请求返回之前夸大网络延迟或昂贵计算的示例。像线程一样,请求一个接一个地发送,不需要等到一个请求完成后再开始下一个请求。当响应返回时,将根据需要在流程中编入和编出co例程

导入异步IO
导入WebSocket
从随机导入randint
从日期时间导入日期时间
异步def receive_ws():
与WebSocket异步。连接(“wss://echo.websocket.org/)作为websocket:
num=randint(1,10)
打印(f“{datetime.now()}-发送随机数:{num}”)
等待websocket.send(f“{num}”)
等待异步IO.sleep(num)
结果=等待websocket.recv()
打印(f“{datetime.now()}-收到的随机数:{result}”)
异步定义流():
等待asyncio.tasks.gather(*[receive_ws()用于范围(10)])
asyncio.run(streams())
输出

2021-05-31 22:05:29.176031-发送随机数:3
2021-05-31 22:05:29.261444-发送随机数:6
2021-05-31 22:05:29.263445-发送随机数:1
2021-05-31 22:05:29.279507-发送随机数:5
2021-05-31 22:05:29.281536-发送随机数:3
2021-05-31 22:05:29.282536-发送随机数:5
2021-05-31 22:05:29.291587-发送随机数:8
2021-05-31 22:05:29.306629-发送随机数:5
2021-05-31 22:05:29.307628-发送随机数:5
2021-05-31 22:05:29.310629-发送随机数:1
2021-05-31 22:05:30.266371-收到的随机数:1
2021-05-31 22:05:30.298470-收到的随机数:1
2021-05-31 22:05:32.192146-收到的随机数:3
2021-05-31 22:05:32.300554-收到的随机数:3
2021-05-31 22:05:34.278179-收到的随机数:5
2021-05-31 22:05:34.278179-收到的随机数:5
2021-05-31 22:05:34.326365-收到的随机数:5
2021-05-31 22:05:34.326365-收到的随机数:5
2021-05-3122:05:35.265017-收到的随机数:6
2021-05-31 22:05:37.289913-收到的随机数:8

而不是
wait asyncio.to_thread(receive_ws)
你不能只做
wait receive_ws()
我的目标-同时从多个线程提供WebSocket你真的需要多个线程吗?是的,我需要同时在多个线程中运行那么为什么要使用async,通常情况下,如果您只使用网络绑定,那么您可以使用异步并避免线程,从代码中可以看出您是这样的,那么为什么您需要线程呢?感谢您所做的工作。尽管如此,我需要几个流来同时接收WebSocket。那么听起来你需要的是多处理而不是多线程。因为线程一次只能做一件事。