【问题标题】:Grouping asynchronous functions to run将要运行的异步函数分组
【发布时间】:2022-10-23 05:40:17
【问题描述】:

我有一个输出从 1 到 10 的数字的代码:

from asyncio import get_event_loop, gather, sleep
    
async def main(k):
    print(k)
    await sleep(1)
    
    
if __name__ == '__main__':
    list_objects = list()
    count_group = 3

    for i in range(1, 11):
        list_objects.append(i)

    list_func = [main(x) for x in list_objects]

    loop = get_event_loop()
    loop.run_until_complete(gather(
        *list_func
    ))

输出:

1 2 3 4 5 6 7 8 9 10

值得注意的是,在上面的示例中,一次同时启动了 10 个函数。如何修复代码以使并发启动的功能数量主要的()等于计数组?也就是说,立即输出应该是123, 然后456, 然后789最后10.

【问题讨论】:

  • 您最好的选择可能是在吃完批次后致电gather,或者引入另一个监督每批次并收集它们的协程。

标签: python python-asyncio


【解决方案1】:

将您的任务分成运行组和gather() 每个组一个接一个。

例子:

if __name__ == '__main__':
    count_group = 3

    list_func = [ main(x) for x in range(1,11) ]
    run_groups = [ list_func[i:i+count_group] for i in range(0, len(list_func), count_group)]
    loop = get_event_loop()

    for rg in run_groups:
        loop.run_until_complete(gather(*rg))

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2021-09-23
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多