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