Я следую примеру работника, приведенному в asyncio.Queue
. В функциях, вызываемых worker_task()
, я бы хотел записать текущее имя работника, не передавая его везде.
Я подозреваю, что через некоторую комбинацию LoggerAdapter
и ContextVar
он может делать то, что я хочу.
Что-то вроде следующего ...
import logging
logging.basicConfig(format="%(worker_name)s %(message)s")
logger = logging.getLogger(__name__)
async def sub_function():
logger.info("a message") # worker-1: a message
async def worker_task(queue, worker_name):
logger.do_something(worker_name) # HELP HERE PLEASE
await sub_function()
queue = asyncio.Queue()
workers = [
loop.create_task(worker_task(queue, "worker-1"),
loop.create_task(worker_task(queue, "worker-2"),
]