第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

記錄協(xié)程感知變量

記錄協(xié)程感知變量

達令說 2021-11-30 17:01:39
我正在關(guān)注asyncio.Queue. 在由worker_task()我調(diào)用的函數(shù)中,我想記錄當前的工作人員姓名,而不必將其傳遞到任何地方。我經(jīng)歷的某種組合懷疑LoggerAdapter,并ContextVar可以做我想做的。以下內(nèi)容...import logginglogging.basicConfig(format="%(worker_name)s %(message)s")logger = logging.getLogger(__name__)async def sub_function():    logger.info("a message") # worker-1: a messageasync 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"),]
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經(jīng)驗 獲得超5個贊

你可以使用這樣的東西:


import logging

import asyncio

from contextvars import ContextVar


WorkerName = ContextVar('worker_name')


logging.basicConfig(format='%(worker_name)s %(message)s', level=logging.INFO)


class WorkerAdapter(logging.LoggerAdapter):

    def process(self, msg, kwargs):

        kwargs.setdefault('extra', {})['worker_name'] = WorkerName.get()

        return msg, kwargs


logger = WorkerAdapter(logging.getLogger(__name__), None)



async def sub_function():

    logger.info('a message')


async def worker_task(worker_name):

    WorkerName.set(worker_name)

    await sub_function()


loop = asyncio.get_event_loop()


workers = [

    loop.create_task(worker_task('worker-1')),

    loop.create_task(worker_task('worker-2')),

]


loop.run_until_complete(asyncio.gather(*workers))


查看完整回答
反對 回復(fù) 2021-11-30
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號