首页 > 解决方案 > 使用 Python 和 Asyncio 运行异步函数

问题描述

我刚开始使用 Python 进行 AsyncIO,我制作了一个非常简单的测试脚本来尝试了解它是如何工作的。

这是我尝试过的:

import cfscrape, asyncio, json, time

BU = cfscrape.create_scraper()

async def run(market):
    
    try:
        # DATA RETRIEVAL #
        URL = "https://api.binance.com/api/v1/klines?&symbol={0}&interval=4h&limit=130".format(market)

        ResultRaw = BU.get(URL, timeout=(10, 15)).content
        Result = json.loads(ResultRaw)

        print(Result)

        time.sleep(2)

        print('Finished')
        
    except Exception as e:
        print(e)


async def main():
    Tickers = ['BTCUSDT', 'ETHBTC', 'ETHUSDT']

    for market in Tickers:
        await run(market)

asyncio.run(main())

该脚本接受三个参数并对 API 端点执行一个简单的查询,然后是 sleep 和 print Finished。输出将如下所示:

Result
Finished
Result 
Finished
Result 
Finished

我不明白的是:为什么不是输出:

Result
Result
Result
Finished
Finished
Finished

看起来脚本一个接一个地同步执行功能。相反,我想为每次执行创建一个协程,因此三个请求应该同时(几乎)执行。同样,我是异步 Python 的新手,所以我所说的可能是错误的,但是任何人都可以帮助我理解这一点吗?

标签: pythonpython-3.xasynchronousasync-awaitpython-asyncio

解决方案


推荐阅读