如何使用asyncio并永久运行该功能。我知道有run_until_complete(function_name)
,但如何使用run_forever
如何调用异步函数?
async def someFunction():
async with something as some_variable:
# do something
我不知道如何启动这个功能。
答案 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
装饰器。