【问题标题】: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()))

【问题讨论】:

    标签: python python-3.x asynchronous python-asyncio


    【解决方案1】:

    运行它时我似乎很不走运。我运行它大约 10 次并收到相同的输出,这让我相信它正在同步运行。再运行几次后,我终于收到了第二个输出。

    【讨论】:

    • 您可以通过更改睡眠持续时间来测试这一点,这样get_forecast1() 的睡眠时间总是比get_forecast2() 长。
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多