mik*_*key 3 python python-asyncio python-3.8
我从作者 caleb hattingh 的书中摘取了以下代码片段。我尝试运行代码片段并遇到此错误。(练习)
我该如何解决这个问题?
import asyncio
async def f(delay):
await asyncio.sleep(1 / delay)
return delay
loop = asyncio.get_event_loop()
for i in range(10):
loop.create_task(f(i))
print(loop)
pending = asyncio.all_tasks()
group = asyncio.gather(*pending, return_exceptions=True)
results = loop.run_until_complete(group)
print(f'Results: {results}')
loop.close()
Run Code Online (Sandbox Code Playgroud)
您必须将loopas 参数传递给.all_tasks()函数:
pending = asyncio.all_tasks(loop)
Run Code Online (Sandbox Code Playgroud)
输出:
<_UnixSelectorEventLoop running=False closed=False debug=False>
<_GatheringFuture pending>
Results: [8, 5, 2, 9, 6, 3, ZeroDivisionError('division by zero'), 7, 4, 1]
Run Code Online (Sandbox Code Playgroud)
因此,要全面更正您的脚本:
import asyncio
async def f(delay):
if delay:
await asyncio.sleep(1 / delay)
return delay
loop = asyncio.get_event_loop()
for i in range(10):
loop.create_task(f(i))
print(loop)
pending = asyncio.all_tasks(loop)
group = asyncio.gather(*pending, return_exceptions=True)
results = loop.run_until_complete(group)
print(f'Results: {results}')
loop.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6004 次 |
| 最近记录: |