[英]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.