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