Asyncio module failing to create task(Asyncio模块无法创建任务)
本文介绍了Asyncio模块无法创建任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的源代码:
import asyncio
async def mycoro(number):
print(f'Starting {number}')
await asyncio.sleep(1)
print(f'Finishing {number}')
return str(number)
c = mycoro(3)
task = asyncio.create_task(c)
loop = asyncio.get_event_loop()
loop.run_until_complete(task)
loop.close()
错误:
RuntimeError: no running event loop
sys:1: RuntimeWarning: coroutine 'mycoro' was never awaited
我在看教程,根据我的代码,当我看的时候从来没有预料到它会出现,在我正在观看的视频中很明显是这样。
推荐答案
只需直接运行协程,而不为其创建任务:
import asyncio
async def mycoro(number):
print(f'Starting {number}')
await asyncio.sleep(1)
print(f'Finishing {number}')
return str(number)
c = mycoro(3)
loop = asyncio.get_event_loop()
loop.run_until_complete(c)
loop.close()
asyncio.create_task
的目的是从正在运行的任务内部创建其他任务。因为它直接启动新任务,所以必须在正在运行的事件循环内使用它,因此在外部使用它时会出错。
如果必须从任务外部创建任务,请使用loop.create_task(c)
。
在较新版本的asyncio
中,使用asyncio.run
可以避免显式处理事件循环:
c = mycoro(3)
asyncio.run(c)
通常,仅使用asyncio.create_task
增加并发性。当另一个任务会立即挡路时,请避免使用它。
# bad task usage: concurrency stays the same due to blocking
async def bad_task():
task = asyncio.create_task(mycoro(0))
await task
# no task usage: concurrency stays the same due to stacking
async def no_task():
await mycoro(0)
# good task usage: concurrency is increased via multiple tasks
async def good_task():
for i in range(3):
asyncio.create_task(mycoro(i))
print('Starting done, sleeping now...')
await asyncio.sleep(1.5)
这篇关于Asyncio模块无法创建任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Asyncio模块无法创建任务


猜你喜欢
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 沿轴计算直方图 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01