import asyncio
import time
NAMES = [ 'Martha' , 'John' , 'Vasyan' , 'Goga' ]
async def cb( context) :
nickname = context.get ( 'nickname' )
print ( f'CB FOR {nickname} CALLED' )
await asyncio.sleep ( 1 )
print ( f'CB FOR {nickname} END' )
async def f( name) :
print ( f'{name} CALLED' )
await asyncio.sleep ( 2 )
print ( f'{name} END' )
async def test ( ) :
futures = [ ]
for name in NAMES:
fut = asyncio.ensure_future ( f( name) )
fut.add_done_callback ( lambda *args: asyncio.create_task ( cb( { 'nickname' : name} ) ) )
futures.append ( fut)
await asyncio.gather ( *futures)
await asyncio.sleep ( 2 )
start = time .time ( )
asyncio.run ( test ( ) )
end = time .time ( )
print ( f'Took {end-start} secs' )
aW1wb3J0IGFzeW5jaW8KaW1wb3J0IHRpbWUKCk5BTUVTID0gWydNYXJ0aGEnLCAnSm9obicsICdWYXN5YW4nLCAnR29nYSddCgoKYXN5bmMgZGVmIGNiKGNvbnRleHQpOgogICAgbmlja25hbWUgPSBjb250ZXh0LmdldCgnbmlja25hbWUnKQogICAgcHJpbnQoZidDQiBGT1Ige25pY2tuYW1lfSBDQUxMRUQnKQogICAgYXdhaXQgYXN5bmNpby5zbGVlcCgxKQogICAgcHJpbnQoZidDQiBGT1Ige25pY2tuYW1lfSBFTkQnKQoKCmFzeW5jIGRlZiBmKG5hbWUpOgogICAgcHJpbnQoZid7bmFtZX0gQ0FMTEVEJykKICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMikKICAgIHByaW50KGYne25hbWV9IEVORCcpCgoKYXN5bmMgZGVmIHRlc3QoKToKICAgIGZ1dHVyZXMgPSBbXQogICAgZm9yIG5hbWUgaW4gTkFNRVM6CiAgICAgICAgZnV0ID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGYobmFtZSkpCiAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGxhbWJkYSAqYXJnczogYXN5bmNpby5jcmVhdGVfdGFzayhjYih7J25pY2tuYW1lJzogbmFtZX0pKSkKICAgICAgICBmdXR1cmVzLmFwcGVuZChmdXQpCgogICAgYXdhaXQgYXN5bmNpby5nYXRoZXIoKmZ1dHVyZXMpCiAgICBhd2FpdCBhc3luY2lvLnNsZWVwKDIpCgpzdGFydCA9IHRpbWUudGltZSgpCmFzeW5jaW8ucnVuKHRlc3QoKSkKZW5kID0gdGltZS50aW1lKCkKcHJpbnQoZidUb29rIHtlbmQtc3RhcnR9IHNlY3MnKQo=