簡體   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