我有一個隊列工作delagator是通過自定義multiprocessing.Pool()產卵15-25子進程。單個工作人員在10-15條消息中發出1-3條logging.info消息,時間少於1000毫秒,我注意到時間戳總是順序的,並且永遠不會與其他消息相沖突。這表明我在多處理或日誌記錄中存在一個共享鎖,但我無法弄清楚它究竟在哪裏。在Linux上使用Python 2.7 multiprocessing.Process和日誌記錄,如何/爲什麼要記錄順序?
這主要是爲了教育目的而提出的,因爲相關軟件將被重構爲異步或多線程,因爲90%的實時時間在IO(遠程API而不是數字處理)。
日誌記錄配置反映Django的,我喜歡怎麼說是有組織:
LOGGING['handlers']['complex_console'] = {'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter':'complex'
}
LOGGING['loggers']['REDACTED_sync'] = {
'handlers': ['complex_console'],
'propagate': True,
'level':'DEBUG'
}
一些快速澄清,multiprocessing.Process確實使用叉子,但調用logging.getLogger()不發,直到子進程後,產生。
雖然我不認爲這是關係到記錄器,我使用多記錄了無數次,始終使用相同的記錄,我也從一個互相交織不同的進程接收消息。您可以嘗試使用單個記錄器實例(可能有幫助,也可能不幫助),或者發佈產卵代碼以獲得更好的外觀。 – micromoses