Starting with Python 3.7 you can use contextvars.ContextVar .
In the example below, I declared request_id and set the value to some_outer_coroutine , and then turned to it in some_inner_coroutine .
import asyncio import contextvars # declare context var request_id = contextvars.ContextVar('Id of request.') async def some_inner_coroutine(): # get value print('Processed inner coroutine of request: {}'.format(request_id.get())) async def some_outer_coroutine(req_id): # set value request_id.set(req_id) await some_inner_coroutine() # get value print('Processed outer coroutine request: {}'.format(request_id.get())) async def main(): tasks = [] for req_id in range(1, 5): tasks.append(asyncio.create_task(some_outer_coroutine(req_id))) await asyncio.gather(*tasks) if __name__ == '__main__': asyncio.run(main())
Exit:
Processed inner coroutine of request: 1 Processed outer coroutine request: 1 Processed inner coroutine of request: 2 Processed outer coroutine request: 2 Processed inner coroutine of request: 3 Processed outer coroutine request: 3 Processed inner coroutine of request: 4 Processed outer coroutine request: 4
Ramil aglyautdinov
source share