[英]Consuming multiple async generators natively in Python
我正在嘗試用 Python 創建一個簡單的網絡監控應用程序。 它本質上應該:
我做了什么:
我嘗試使用異步生成器:
async def run(command: str):
proc = await asyncio.create_subprocess_shell(
command,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
while True:
line = await proc.stdout.readline()
if line: yield line
然后在程序的其他地方使用它:
...
async for output_line in run("some_command"):
# do something with line
這適用於單個子進程,但是我不確定當我需要多個異步生成器並行運行並並行使用時該怎么做 - 有些可能像asyncio.gather ,但對於異步生成器。
您認為這樣做的最佳方法是什么? 經過搜索,我找到了aiostream模塊,它可以像這樣合並多個異步生成器。 然后,我可以使用該行生成一個元組,例如我給出的命令,以識別輸出行來自哪個生成器。
但是,也許有一個更簡單的解決方案,希望是原生解決方案?
謝謝!
您正在尋找的是asyncio.gather
,它同時運行多個等待對象。
要使用它,我認為您的首要任務是將解析代碼包裝到一個函數中,例如:
async def parse(cmd):
async for output_line in run(cmd):
# something
然后在另一個函數/上下文中,用收集包裝解析:
result = await asyncio.gather(
parse("cmd1"),
parse("cmd2"),
parse("cmd3"),
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.