[英]Learning asyncio: "coroutine was never awaited" warning error
[英]Asyncio coroutine never awaited error
我在這里無法解決和理解問題。 我正在使用一個示例來學習Asyncio,但是我使用的代碼與我的相似,但我給出了一條錯誤消息:
sys:1:RuntimeWarning:從未等待協程'run_script'
請任何幫助將不勝感激。 下面是我的代碼
async def run_script(script):
print("Run", script)
await asyncio.sleep(1)
os.system("python " + script)
我正在這樣運行
for script in os.listdir():
if script.endswith(".py"):
scripts.append(run_script(script))
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(scripts))
loop.close()
正如@dim提到的,您的代碼中的錯字是什么,您還需要知道os.system
是同步運行的,這意味着文件夾中的腳本將按順序而不是異步地運行。
要了解這一點,請添加名為hello_world.py的文件:
import time
time.sleep(2)
print('hello world')
如果按以下方式運行腳本,則將花費2s + 2s = 4s:
loop = asyncio.get_event_loop()
loop.run_until_complete(
asyncio.gather(
*[run_script('hello_world.py') for _ in range(2)]
)
)
因此,要解決此問題,可以使用asyncio.subprocess
模塊:
from asyncio import subprocess
async def run_script(script):
process = await subprocess.create_subprocess_exec('python', script)
try:
out, err = await process.communicate()
except Exception as err:
print(err)
然后,它只需要2秒鍾,因為它是異步運行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.