计算事件循环中的活动任务
Count active tasks in event loop
如何找出事件循环中有多少活动任务?
在文档中我只找到 asyncio.Task.all_tasks() 但它是简单的增量计数器:
import asyncio
async def coro():
await asyncio.sleep(1)
async def main():
tasks = []
print('Tasks count: ', len(asyncio.Task.all_tasks()))
for idx in range(3):
task = asyncio.ensure_future(coro())
tasks.append(task)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
await asyncio.gather(*tasks)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
输出:
Tasks count: 1
Tasks count: 2
Tasks count: 3
Tasks count: 4
Tasks count: 4
预期输出:
Tasks count: 1
Tasks count: 2
Tasks count: 3
Tasks count: 4
Tasks count: 1
all_tasks
returns 所有已注册的任务,包括已完成的任务。您可以简单地按 done()
筛选任务以获取活动任务:
import asyncio
async def coro():
await asyncio.sleep(1)
async def main():
tasks = []
print('Tasks count: ', len(asyncio.Task.all_tasks()))
for idx in range(3):
task = asyncio.ensure_future(coro())
tasks.append(task)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
await asyncio.gather(*tasks)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
print('Active tasks count: ', len(
[task for task in asyncio.Task.all_tasks() if not task.done()])
)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
输出:
Tasks count: 1
Tasks count: 2
Tasks count: 3
Tasks count: 4
Tasks count: 4
Active tasks count: 1
在 Python 3.7+ 中有一个 asyncio.all_tasks()
方法,它 returns 当前 运行 循环的未完成任务。
所以这简化为:
count_active_tasks = len(asyncio.all_tasks())
如何找出事件循环中有多少活动任务? 在文档中我只找到 asyncio.Task.all_tasks() 但它是简单的增量计数器:
import asyncio
async def coro():
await asyncio.sleep(1)
async def main():
tasks = []
print('Tasks count: ', len(asyncio.Task.all_tasks()))
for idx in range(3):
task = asyncio.ensure_future(coro())
tasks.append(task)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
await asyncio.gather(*tasks)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
输出:
Tasks count: 1
Tasks count: 2
Tasks count: 3
Tasks count: 4
Tasks count: 4
预期输出:
Tasks count: 1
Tasks count: 2
Tasks count: 3
Tasks count: 4
Tasks count: 1
all_tasks
returns 所有已注册的任务,包括已完成的任务。您可以简单地按 done()
筛选任务以获取活动任务:
import asyncio
async def coro():
await asyncio.sleep(1)
async def main():
tasks = []
print('Tasks count: ', len(asyncio.Task.all_tasks()))
for idx in range(3):
task = asyncio.ensure_future(coro())
tasks.append(task)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
await asyncio.gather(*tasks)
print('Tasks count: ', len(asyncio.Task.all_tasks()))
print('Active tasks count: ', len(
[task for task in asyncio.Task.all_tasks() if not task.done()])
)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
输出:
Tasks count: 1
Tasks count: 2
Tasks count: 3
Tasks count: 4
Tasks count: 4
Active tasks count: 1
在 Python 3.7+ 中有一个 asyncio.all_tasks()
方法,它 returns 当前 运行 循环的未完成任务。
所以这简化为:
count_active_tasks = len(asyncio.all_tasks())