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:
def sync_cb( name, arg) :
asyncio.create_task ( cb( { 'nickname' : name} ) )
fut = asyncio.ensure_future ( f( name) )
fut.add_done_callback ( partial( sync_cb, 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' )
aW1wb3J0IGFzeW5jaW8KaW1wb3J0IHRpbWUKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKCk5BTUVTID0gWydNYXJ0aGEnLCAnSm9obicsICdWYXN5YW4nLCAnR29nYSddCgoKYXN5bmMgZGVmIGNiKGNvbnRleHQpOgogICAgbmlja25hbWUgPSBjb250ZXh0LmdldCgnbmlja25hbWUnKQogICAgcHJpbnQoZidDQiBGT1Ige25pY2tuYW1lfSBDQUxMRUQnKQogICAgYXdhaXQgYXN5bmNpby5zbGVlcCgxKQogICAgcHJpbnQoZidDQiBGT1Ige25pY2tuYW1lfSBFTkQnKQoKCmFzeW5jIGRlZiBmKG5hbWUpOgogICAgcHJpbnQoZid7bmFtZX0gQ0FMTEVEJykKICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMikKICAgIHByaW50KGYne25hbWV9IEVORCcpCgoKYXN5bmMgZGVmIHRlc3QoKToKICAgIGZ1dHVyZXMgPSBbXQogICAgZm9yIG5hbWUgaW4gTkFNRVM6CgogICAgICAgIGRlZiBzeW5jX2NiKG5hbWUsIGFyZyk6CiAgICAgICAgICAgIGFzeW5jaW8uY3JlYXRlX3Rhc2soY2IoeyduaWNrbmFtZSc6IG5hbWV9KSkKCiAgICAgICAgZnV0ID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGYobmFtZSkpCiAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKHBhcnRpYWwoc3luY19jYiwgbmFtZSkpCiAgICAgICAgZnV0dXJlcy5hcHBlbmQoZnV0KQoKICAgIGF3YWl0IGFzeW5jaW8uZ2F0aGVyKCpmdXR1cmVzKQogICAgYXdhaXQgYXN5bmNpby5zbGVlcCgyKQoKc3RhcnQgPSB0aW1lLnRpbWUoKQphc3luY2lvLnJ1bih0ZXN0KCkpCmVuZCA9IHRpbWUudGltZSgpCnByaW50KGYnVG9vayB7ZW5kLXN0YXJ0fSBzZWNzJykK