import asyncio
import time
from functools import partial
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:
async def coro( name) :
await f( name)
await cb( { 'nickname' : name} )
futures.append ( coro( name) )
await asyncio.gather ( *futures)
await asyncio.sleep ( 2 )
start = time .time ( )
asyncio.run ( test ( ) )
end = time .time ( )
print ( f'Took {end-start} secs' )
aW1wb3J0IGFzeW5jaW8KaW1wb3J0IHRpbWUKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKCk5BTUVTID0gWydNYXJ0aGEnLCAnSm9obicsICdWYXN5YW4nLCAnR29nYSddCgoKYXN5bmMgZGVmIGNiKGNvbnRleHQpOgogICAgbmlja25hbWUgPSBjb250ZXh0LmdldCgnbmlja25hbWUnKQogICAgcHJpbnQoZidDQiBGT1Ige25pY2tuYW1lfSBDQUxMRUQnKQogICAgYXdhaXQgYXN5bmNpby5zbGVlcCgxKQogICAgcHJpbnQoZidDQiBGT1Ige25pY2tuYW1lfSBFTkQnKQoKCmFzeW5jIGRlZiBmKG5hbWUpOgogICAgcHJpbnQoZid7bmFtZX0gQ0FMTEVEJykKICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMikKICAgIHByaW50KGYne25hbWV9IEVORCcpCgoKYXN5bmMgZGVmIHRlc3QoKToKICAgIGZ1dHVyZXMgPSBbXQogICAgZm9yIG5hbWUgaW4gTkFNRVM6CiAgICAJCiAgICAgICAgYXN5bmMgZGVmIGNvcm8obmFtZSk6CiAgICAJICAgIGF3YWl0IGYobmFtZSkKICAgIAkgICAgYXdhaXQgY2IoeyduaWNrbmFtZSc6IG5hbWV9KQoKICAgICAgICBmdXR1cmVzLmFwcGVuZChjb3JvKG5hbWUpKQoKICAgIGF3YWl0IGFzeW5jaW8uZ2F0aGVyKCpmdXR1cmVzKQogICAgYXdhaXQgYXN5bmNpby5zbGVlcCgyKQoKc3RhcnQgPSB0aW1lLnRpbWUoKQphc3luY2lvLnJ1bih0ZXN0KCkpCmVuZCA9IHRpbWUudGltZSgpCnByaW50KGYnVG9vayB7ZW5kLXN0YXJ0fSBzZWNzJykK