Python asyncio任务列表进度记录

问题描述

我需要处理大量数据行,并且异步地执行此操作才有意义。

我需要查看列表处理状态,即Done processing 1/3,但是当我增加计数器时,它始终保持为1。这很有意义,因为我已将计数器发送到函数中。我需要这样做,因为没有它,我会得到:

UnboundLocalError: local variable 'processed' referenced before assignment

使用Python 3.8

任何帮助将不胜感激!

以下是测试链接:https://ideone.com/gRjrf2

我在下面提取了我的代码:

    import os,logging
    import asyncio
     
    logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',datefmt='%d-%b-%y %H:%M:%S')
    logger = logging.getLogger(__name__)
     
    items = [{"name": "A"},{"name": "B"},{"name": "C"}]
     
    processed = 0
     
    async def increment(item):
        count = item.get('count',0)
        count += 1
        return count
     
    async def get_and_update(item,processed):
        item['count'] = await increment(item)
        # Show progress now,but how?
        processed += 1
        logger.info(f"You can't see me {processed}")
     
    async def run():
        logger.info(f"Processing {len(items)} items...")
        await asyncio.gather(*[
            asyncio.create_task(
                get_and_update(item,processed)
            ) for item in items
        ])
     
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run())

我得到的输出是:

28-Aug-20 11:19:22 INFO     [prog.py:23] Processing 3 items...
28-Aug-20 11:19:22 INFO     [prog.py:20] You can't see me 1
28-Aug-20 11:19:22 INFO     [prog.py:20] You can't see me 1
28-Aug-20 11:19:22 INFO     [prog.py:20] You can't see me 1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)