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')
