def to_asyncio_in_thread(func): async def wrapper(*args, **kwargs): return await asyncio.get_event_loop().run_in_executor(None, lambda: func(*args, **kwargs)) return wrapper # Usage: @to_asyncio_in_thread def blocking_call(): print('start wait') sleep(10) async def main(): await asyncio.gather(*[ asyncio.create_task(blocking_call()), asyncio.create_task(blocking_call()), asyncio.create_task(blocking_call()) ]) asyncio.run(main())