首页 > 解决方案 > 遵循教程时,Asyncio 模块在 Python 3.8 上不起作用

问题描述

源代码:

import asyncio
import time

async def mycoro(number):
    start = time.time()
    print(f'Starting {number}')
    await asyncio.sleep(1)
    print(f'Finishing {number}')
    end = time.time()
    print(end - start)
    return str(number)

many = asyncio.gather(
    mycoro(1),
    mycoro(2),
    mycoro(3)
)

asyncio.run(many)

完全错误:

Traceback (most recent call last):
  File "c:/Users/JasonTorrez/Desktop/Asyncio/test.py", line 19, in <module>
    asyncio.run(many)
  File "C:\Users\JasonTorrez\AppData\Local\Programs\Python\Python38-32\lib\asyncio\runners.py", line 37, in run
    raise ValueError("a coroutine was expected, got {!r}".format(main))
ValueError: a coroutine was expected, got <_GatheringFuture pending>

我不知道为什么它不起作用。我尝试了很多视频,但没有任何帮助。

标签: pythonpython-asyncio

解决方案


迪恩先生是对的。

https://bugs.python.org/issue36222
https://docs.python.org/dev/library/asyncio-task.html#running-tasks-concurrently

您可以从链接中找到教育部信息。

import asyncio
import time

async def mycoro(number):
    start = time.time()
    print(f'Starting {number}')
    await asyncio.sleep(1)
    print(f'Finishing {number}')
    end = time.time()
    print(end - start)
    return str(number)

async def call_async():
    await asyncio.gather(
        mycoro(1),
        mycoro(2),
        mycoro(3)
    )

asyncio.run(call_async())

Starting 1
Starting 2
Starting 3
Finishing 1
1.0044970512390137
Finishing 2
1.0045382976531982
Finishing 3
1.004551887512207


推荐阅读