這段代碼的目標是讓它運行 main 函式,被呼叫main_process(),直到結束的異步函式被呼叫finish_process(),將變數設定finish_state為,True并且回圈不會重復。
import asyncio
import time
condition = True
finish_state = False
x = 0
async def finish_process(finish_state):
finish_state = True
time.sleep(5)
return finish_state
async def main_process(condition,finish_state,x):
while condition == True:
finish_state = await asyncio.run(finish_process(finish_state))
x = x 1
print(x)
#if(x > 10):
if(finish_state == True):
print("Termina!")
condition = False
asyncio.run(main_process(condition,finish_state,x))
我已經將 await 放在另一個異步函式中的異步函式呼叫中,我不明白為什么它不斷給出錯誤await。
我認為用舊的await或用舊的指示yield from應該解決同時等待另一個函式的結果。
raise RuntimeError(
RuntimeError: asyncio.run() cannot be called from a running event loop
sys:1: RuntimeWarning: coroutine 'finish_process' was never awaited
uj5u.com熱心網友回復:
您的程式存在以下問題:
- 您應該使用
asyncio.create_taskorasyncio.gather來運行異步任務,而不是asyncio.run. - 可以替換
time.sleep(5)為await asyncio.sleep(5)
import asyncio
import time
condition = True
finish_state = False
x = 0
async def finish_process(finish_state):
finish_state = True
await asyncio.sleep(5)
return finish_state
async def main_process(condition,finish_state,x):
while condition == True:
finish_state = await asyncio.create_task(finish_process(finish_state))
x = x 1
print(x)
#if(x > 10):
if(finish_state == True):
print("Termina!")
condition = False
asyncio.run(main_process(condition,finish_state,x))
輸出:
1
Termina!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411866.html
標籤:
