如何使用 aiometer 的 run_all 方法创建进度条?

How to create a progress bar with aiometer's run_all method?

提问人:Fábio Marane 提问时间:10/31/2023 更新时间:10/31/2023 访问量:25

问:

我一直在使用 httpx、asyncio 和 aiometer 从 API 创建管道,以限制同时运行的协程数量。

我知道可以为 asyncio 的 gather 方法创建异步进度条,但是我没有发现任何关于对 aiometer 的run_all做同样的事情。

以下是使用的主要功能:

from functools import partial
from asyncio import run
from aiometer import run_all

async def main():
    result_donations = run_all(
        [partial(ApiGuara.get_donations, page) for page in range(50)],
        max_at_once=10
        )
    await result_donations

run(main())

“get_donations”方法是一种异步方法,它从 API 获取数据并插入到数据湖中。

async def get_donations(self, page:int) -> None:
        async with AsyncClient(
            base_url=f'{self.url}',
            headers=self.headers,
            timeout=None) as asyncclient:
            try:
                r = await asyncclient.get(f'/donations?page={page}')
                donations_json = r.json()['data']
                for donation in donations_json:
                    donation['_id'] = donation.pop('id')
                    try:
                        #DONATIONS_COLLECTION.insert_one(donation)
                        pass
                    except errors.DuplicateKeyError:
                        pass
            finally:
                await asyncclient.aclose()             

我尝试使用 tqdm,就像它与 asyncio 一起使用一样,但是它不能与 aiometer 一起正常工作。

有谁知道该怎么做?谢谢

异步 python-requests 进度条 python-asyncio

评论

0赞 Fábio Marane 10/31/2023
注意:这里的目标是在“result_donations”处跟踪协程的进度。
0赞 user3778817 11/11/2023
我有一个类似的用例,但我正在使用 - 就我而言,我只是将迭代器包装在 tqdm 中,即 .在您的情况下,请尝试aiometer.run_on_eachresult = await aiometer.run_on_each(partial(my_func, headers=HEADERS), tqdm(to_process),max_per_second=10, max_at_once=10)

答: 暂无答案