将异步函数分组到 运行
Grouping asynchronous functions to run
我有一个代码可以输出 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 个函数。如何修改代码,使并发启动函数的数量 main() 等于 count_group?也就是说,立即输出应该是123,然后是456,然后是789,最后是10.
将您的任务分成 运行 组,然后 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))
我有一个代码可以输出 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 个函数。如何修改代码,使并发启动函数的数量 main() 等于 count_group?也就是说,立即输出应该是123,然后是456,然后是789,最后是10.
将您的任务分成 运行 组,然后 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))