Asyncio协程从未等待错误
Asyncio coroutine never awaited error
我无法解决和理解这里的问题。我正在使用示例来学习 Asyncio,但我使用的代码与我的代码相似,但我的代码给出了一条错误消息:
sys:1: RuntimeWarning: coroutine 'run_script' was never awaited
如有任何帮助,我们将不胜感激。下面是我的代码
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
是同步的 运行ning,这意味着您文件夹中的脚本将是 运行按顺序而不是异步方式。
要了解这一点,请添加名为 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 秒,因为它是 运行ning 异步。
我无法解决和理解这里的问题。我正在使用示例来学习 Asyncio,但我使用的代码与我的代码相似,但我的代码给出了一条错误消息:
sys:1: RuntimeWarning: coroutine 'run_script' was never awaited
如有任何帮助,我们将不胜感激。下面是我的代码
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
是同步的 运行ning,这意味着您文件夹中的脚本将是 运行按顺序而不是异步方式。
要了解这一点,请添加名为 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 秒,因为它是 运行ning 异步。