【发布时间】:2017-01-06 21:27:15
【问题描述】:
我用async def 创建了一个async python 协程,我想在列表中的每个元素上运行它。
但是,协程启动了一个单独的进程,我的电脑资源有限,所以我只想同时运行这些协程中的n。当一个完成后,我希望另一个开始。
我还在学习asyncio,但我不知道如何在这个框架内做到这一点。
我知道我可以使用类似这样的方法同时运行 n 作业:
commands = asyncio.gather(*[run_command(f) for f in islice(my_large_list,n)])
# Run the commands
results = loop.run_until_complete(commands)
但是,我不知道如何在每个作业完成后替换它。
【问题讨论】:
-
您想将
multiporcessing与asyncio一起使用吗?如果是这样的话:我用踏板试过了;不完全相同,但可能会让您知道如何到达那里, -
我真的不想在 asyncio 中使用多处理。我正在尝试调用外部进程...另一种说法:我想要并发,而不是并行。
-
对不起,我很困惑... asyncio 将在单个线程上运行;无需担心资源有限。 otoh:启动进程将导致并行(不是并发)。那是哪一个?你能发布一个你的协程的玩具例子吗? (我很想知道你是如何
await一个你开始的过程)。 -
@hiroprotagonist 我正在运行 python 程序单线程,但它正在使用
asyncio.create_subprocess_exec创建子进程。然而,这个问题是关于如何在某种队列中一次只运行nasync 协程。