【发布时间】:2021-09-03 17:14:52
【问题描述】:
我正在学习 python asyncio 并使用它们测试大量代码。
下面是我尝试使用 asyncio 和 aiohttp 订阅多个 Websocket 流的代码。
我不明白为什么当coro(item1, item2): 作为任务执行时,它没有进入async with ... 块。 (即打印了“A”,但没有打印“B”)。
谁能帮我理解这个原因?
(我已经得到了working code 但是,我只是想了解这背后的机制是什么。)
代码
import aiohttp
import asyncio
import json
async def coro(
item1,
item2):
print("A")
async with aiohttp.ClientSession() as session:
async with session.ws_connect(url='URL') as ws:
print("B")
await asyncio.gather(ws.send_json(item1),
ws.send_json(item2))
print("C")
async for msg in ws:
print(msg)
async def ws_connect(item1,
item2):
task = asyncio.create_task(coro(item1, item2))
return task
async def main():
item1 = {
"method": "subscribe",
"params": {'channel': "..."}
}
item2 = {
"method": "subscribe",
"params": {'channel': "..."}
}
ws_task = await ws_connect(item1, item2)
print("D")
asyncio.run(main())
输出
D
A
【问题讨论】:
标签: python asynchronous websocket python-asyncio aiohttp