如何永远运行异步函数(Python)

时间:2018-05-22 17:09:31

标签: python python-3.x asynchronous python-asyncio

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

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

我不知道如何启动这个功能。

2 个答案:

答案 0 :(得分:1)

<div class="grid-layout"> <div class="item">content</div> <div class="item">content</div> <div class="item span-3">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item span-2">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item span-3">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item span-2">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> <div class="item">content</div> </div>并不意味着异步函数会神奇地运行,这意味着循环将永远运行,或者至少在有人调用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()之前使用loop.create_task或等效函数添加一些协同程序。但即使是一个不执行任何任务而且无所事事的事件循环也很有用,因为另一个线程可以调用asyncio.run_coroutine_threadsafe并让它工作。

答案 1 :(得分:0)

当您说我不确定如何启动该功能时,我不确定您的意思。如果您从字面意义上提出问题:

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装饰器。