fork download
  1. import os, logging
  2. import asyncio
  3.  
  4. logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s', datefmt='%d-%b-%y %H:%M:%S')
  5. logger = logging.getLogger(__name__)
  6.  
  7. items = [{"name": "A"}, {"name": "B"}, {"name": "C"}]
  8.  
  9. processed = 0
  10.  
  11. async def increment(item):
  12. count = item.get('count', 0)
  13. count += 1
  14. return count
  15.  
  16. async def get_and_update(item, processed):
  17. item['count'] = await increment(item)
  18. # Show progress now, but how?
  19. processed += 1
  20. logger.info(f"You can't see me {processed}")
  21.  
  22. async def run():
  23. logger.info(f"Processing {len(items)} items...")
  24. await asyncio.gather(*[
  25. asyncio.create_task(
  26. get_and_update(item, processed)
  27. ) for item in items
  28. ])
  29.  
  30. loop = asyncio.get_event_loop()
  31. loop.run_until_complete(run())
Runtime error #stdin #stdout #stderr 0.18s 25136KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
28-Aug-20 11:30:22 INFO     [prog.py:23] Processing 3 items...
Traceback (most recent call last):
  File "./prog.py", line 31, in <module>
  File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "./prog.py", line 27, in run
  File "./prog.py", line 19, in get_and_update
UnboundLocalError: local variable 'processed' referenced before assignment