我可以在Python 3.5的函数中跳过“async def”吗?

时间:2018-01-29 09:56:57

标签: python asynchronous python-asyncio

我可以在Python 3.5函数中跳过async def关键字,我的代码仍然可以异步工作吗?

这样的事情:

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

def mysleep():
    loop = asyncio.get_event_loop()
    loop.await(sleep)

def main():
    mysleep()

1 个答案:

答案 0 :(得分:4)

正如文森特注意到,如果你改变你的代码,那么它将毫无错误地发挥作用:

import asyncio


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

def mysleep():
    loop = asyncio.get_event_loop()
    loop.run_until_complete(sleep())

def main():
    mysleep()


if __name__ == '__main__':
    main()

但这是否意味着它是异步工​​作的?

答案是 - 它仅在mysleep()函数内部异步工作(并且可以在那里得到相关benefit),但它阻止了mysleep()之外的所有内容。这意味着mysleep()本身或任何外部代码不能与其他异步函数一起异步运行。

要避免这种情况,您应该在大多数可能的外部作用域中运行事件循环:从程序的入口点开始生成事件循环。它可以在这个单个事件循环中异步运行所有内容。