为啥这个程序不异步运行?
Posted
技术标签:
【中文标题】为啥这个程序不异步运行?【英文标题】:Why does this program not run asynchronously?为什么这个程序不异步运行? 【发布时间】:2021-05-19 17:54:08 【问题描述】:我有想要异步运行的代码。我希望输出是以下之一:
Getting forecast 1
Getting forecast 2
Forecast 2 retrieved
Forecast 1 retrieved
或者
Getting forecast 1
Getting forecast 2
Forecast 1 retrieved
Forecast 2 retrieved
但是,它似乎是同步运行的,因为每次我运行它都会得到
Getting forecast 1
Getting forecast 2
Forecast 1 retrieved
Forecast 2 retrieved
代码附在下面:
import asyncio
import random
import pandas as pd
import numpy as np
async def get_forecast1():
print('Getting forecast 1')
await asyncio.sleep(random.randint(0 , 10))
return pd.DataFrame(np.zeros((2,2)))
async def retrieve_forecast1():
forecast1 = await get_forecast1()
print('Forecast 1 retrieved')
return forecast1
async def get_forecast2():
await asyncio.sleep(random.randint(0 , 10))
return pd.DataFrame(np.zeros((3,3)))
async def retrieve_forecast2():
print('Getting forecast 2')
forecast2 = await get_forecast2()
print('Forecast 2 retrieved')
return forecast2
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(retrieve_forecast1(), retrieve_forecast2()))
【问题讨论】:
【参考方案1】:运行它时我似乎很不走运。我运行它大约 10 次并收到相同的输出,这让我相信它正在同步运行。再运行几次后,我终于收到了第二个输出。
【讨论】:
您可以通过更改睡眠持续时间来测试这一点,这样get_forecast1()
的睡眠时间总是比get_forecast2()
长。以上是关于为啥这个程序不异步运行?的主要内容,如果未能解决你的问题,请参考以下文章