繁体   English   中英

如何永远运行异步功能(Python)

[英]How to run async function forever (Python)

如何使用asyncio并永久运行该功能。 我知道这里有run_until_complete(function_name)但是如何使用run_forever如何调用异步函数?

async def someFunction():
    async with something as some_variable:
        # do something

我不确定如何启动该功能。

run_forever并不意味着异步函数将永远运行,这意味着循环将永远运行,或者至少直到有人调用loop.stop()为止。 要从字面上永远运行异步函数,您需要创建一个执行该任务的异步函数。 例如:

async def some_function():
    async with something as some_variable:
        # do something

async def forever():
    while True:
        await some_function()

loop = asyncio.get_event_loop()
loop.run_until_complete(forever())

这就是为什么run_forever()不接受参数,也不在乎任何特定的协程。 典型的模式是在调用run_forever()之前使用loop.create_task或等效方法添加一些协程。 但是,即使一个不执行任何任务并asyncio.run_coroutine_threadsafe的事件循环也可能很有用,因为另一个线程可以调用asyncio.run_coroutine_threadsafe并使其正常工作。

我不确定您所说的确切含义时, 我不确定如何启动该功能 如果您从字面意义上问这个问题:

loop = asyncio.get_event_loop()
loop.run_forever()

如果您希望在初始化循环之前向循环添加函数,那么loop.run_forever()之前的以下行就足够了:

asyncio.async(function())

要将功能添加到已在运行的循环中,您将需要ensure_future

asyncio.ensure_future(function(), loop=loop)

在这两种情况下,都必须以某种方式将要调用的函数指定为异步函数,即使用async函数前缀或@asyncio.coroutine装饰器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM