fork(1) download
  1. import asyncio
  2. import time
  3.  
  4. NAMES = ['Martha', 'John', 'Vasyan', 'Goga']
  5.  
  6.  
  7. async def cb(context):
  8. nickname = context.get('nickname')
  9. print(f'CB FOR {nickname} CALLED')
  10. await asyncio.sleep(1)
  11. print(f'CB FOR {nickname} END')
  12.  
  13.  
  14. async def f(name):
  15. print(f'{name} CALLED')
  16. await asyncio.sleep(2)
  17. print(f'{name} END')
  18.  
  19.  
  20. async def test():
  21. futures = []
  22. for name in NAMES:
  23. fut = asyncio.ensure_future(f(name))
  24. fut.add_done_callback(lambda *args: asyncio.create_task(cb({'nickname': name})))
  25. futures.append(fut)
  26.  
  27. await asyncio.gather(*futures)
  28. await asyncio.sleep(2)
  29.  
  30. start = time.time()
  31. asyncio.run(test())
  32. end = time.time()
  33. print(f'Took {end-start} secs')
  34.  
Success #stdin #stdout 0.1s 16148KB
stdin
Standard input is empty
stdout
Martha CALLED
John CALLED
Vasyan CALLED
Goga CALLED
Martha END
John END
Vasyan END
Goga END
CB FOR Goga CALLED
CB FOR Goga CALLED
CB FOR Goga CALLED
CB FOR Goga CALLED
CB FOR Goga END
CB FOR Goga END
CB FOR Goga END
CB FOR Goga END
Took 4.015184640884399 secs