我需要在eventloop中包含我的所有功能吗?

时间:2017-06-15 19:34:09

标签: python async-await python-asyncio

如果我有事件循环和异步函数:

# asyncio_coroutine_forever.py


import asyncio

async def hello_world():
    print('Hello World')
    await good_evening()


async def good_evening():
    print('Good Evening')


loop = asyncio.get_event_loop()

try:
    loop.run_until_complete(hello_world())
    loop.run_forever()
finally:
    print('closing event loop')
    loop.close()

函数hellp_world,由eventloop调用。第二个函数good_evening是否在同一个事件循环中?

我是否必须在循环中包含第二个函数或仅包含第一个函数? 如果我使用这个例子,第二个使用循环并切换上下文?

1 个答案:

答案 0 :(得分:4)

  1. 是的,run_until_complete将执行您的hello_world未来,直到它返回或失败(它还会在此过程中阻止您的主题)。

  2. 除非您想自行安排,否则您不必包含第二个功能。

  3. run_until_complete将会运行一个未来,直到它完成,但它也会导致事件循环运行,因此如果您安排未来,它将在函数传递给run_util_complete之前运行。