簡體   English   中英

Asyncio協程從未等待的錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM