运行协程需要一个 事件循环
。使用该
asyncio()库创建一个:
import asyncio# Python 3.7+asyncio.run(foo())
要么
# Python 3.6 and olderloop = 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 fooTypeError: object NoneType can't be used in 'await' expression
在这种情况下,您应该改用
asyncio.sleep()协程:
async def foo(): await asyncio.sleep(1)
它与循环配合以使其他任务能够运行。要阻止没有异步等效项的第三方库中的代码,可以在执行程序池中运行该代码。请参阅asyncio开发指南中的
运行阻止代码 。



