我有一個python腳本啓動一個類foo的多個實例,然後使用multiprocessing.pool執行該類的方法「運行」 .map像這樣:從python多處理日誌文件,每個線程一個日誌文件,來自導入模塊的日誌消息
import multiprocessing.dummy as mp
import foo_class
def run_instance(instance):
return instance.run()
for arguments in list_of_arguments:
instances.append(foo_class.Foo(arguments))
mp.pool.map(run_instance, instances)
它工作得很好。給我的麻煩事是,在類中的記錄和文件處理器的構造開始,我希望有一個獨立的日誌文件的類的每個實例:
class Foo():
def __init__(self, name):
self.logger = logging.getLogger()
self.logfile = logging.FileHandler(name + '.log')
(我省略了格式化和對數因爲它不是這個問題的一部分。)現在的問題是,用上面描述的方法,我得到每個實例的一個日誌文件,但是所有實例的日誌消息都存在於每個日誌文件中。 如果我的名字記錄器,像這樣:
self.logger = getLogger(name + '_logger')
則日誌的消息將被分配到正確的文件,但所有進口的模塊,我在其中初始化模塊記錄儀這樣的登錄信息:
module_logger = logging.getLogger(__name__)
將不再顯示在日誌文件中,因爲模塊記錄器不能識別類實例中與父記錄器不同的命名記錄器(它完全符合上述方法)。
有沒有什麼辦法可以獲得每個實例的日誌文件,這些日誌文件包含來自導入模塊的日誌消息,這些日誌消息也被寫入這些文件?
感謝您的快速回復! 實際上,我想要的是,module_logger是類記錄器的子類,如果我明確給類記錄器命名,那麼這將不起作用,因爲我然後需要將類實例記錄器的名稱傳遞給進口模塊。 – Steffen 2015-03-02 17:00:31
@Steffen我認爲將模塊記錄器作爲類實例中的記錄器的孩子是不合理的 - 也許您誤解了模塊的工作方式?一個模塊獨立於任何這樣的實例以及任何「import」語句而存在。如果你在多個地方導入一個模塊,你會得到同一個對象的引用 – goncalopp 2015-03-02 17:15:21