您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Python 3.5中使用async / await?

如何在Python 3.5中使用async / await?

运行协程需要一个 事件循环 。使用该asyncio()创建一个

import asyncio

# Python 3.7+
asyncio.run(foo())

要么

# Python 3.6 and older
loop = asyncio.get_event_loop()
loop.run_until_complete(foo())

另请参阅文档的“ 任务和协程” 一章asyncio。如果您已经在运行循环,则希望通过创建任务(在旧版本的asyncio.create_task(...)python 3.7+asyncio.ensure_future(...)中)同时运行其他协程。

但是请注意,time.sleep()不是 一个awaitable对象。它返回,None因此您在1秒后得到异常:

>>> asyncio.run(foo())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/.../lib/python3.7/asyncio/base_events.py", line 573, in run_until_complete
    return future.result()
  File "<stdin>", line 2, in foo
TypeError: object nonetype can't be used in 'await' expression

在这种情况下,您应该改asyncio.sleep()协程

async def foo():
    await asyncio.sleep(1)

它与循环配合以使其他任务能够运行。要阻止没有异步等效项的第三方库中的代码,可以在执行程序池中运行该代码。请参阅asyncio开发指南中的运行阻止代码

python 2022/1/1 18:36:18 有244人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶