簡體   English   中英

Python 多進程記錄到共享文件

[英]Python multiple process logging to a shared file

我使用多處理框架創建了幾個並行子進程(通過 JoinableQueue),但我只是在我的主線程中設置了日志記錄(使用普通的 python 日志記錄模塊)。 當我測試代碼時,似乎所有子進程都能夠將它們的日志放入我在主進程開始時指定的單個日志文件中,沒有任何問題。

但是,根據python logging cookbook ,它說模塊日志記錄只是線程安全的,而不是進程安全的。 它建議使用:

  1. multiprocessing.logging(它沒有完整的日志功能);
  2. 使用 mutliprocessing.Lock 將連接從子進程序列化到日志文件
  3. 使用 logging.QueueHandler 將日志發送到一個 multiprocessing.Queue 中,然后在主進程中有一個專門的日志線程來處理將日志記錄寫入日志文件

所有建議的解決方案對我來說都有意義,而且我實際上能夠實施解決方案#3 - 它有效,沒有問題。

但是,我確實有一個問題,如果我們處理不好會出現什么問題。 如果我不做 #1,2,3 中的任何一項(如我在第一段中所描述的),可能會發生什么不良后果? 我怎樣才能讓那些糟糕的后果發生(我很想看到它們)?

通常,您希望日志寫入以某種方式是原子的 也就是說,在這種情況下,當某事將一段文本寫入日志時,該塊會一起出現,而不是被拆分並與其他日志條目的內容混合在一起。 如果多個進程嘗試在沒有某種中介的情況下寫入文件,則可能導致內容的這種混合甚至破壞。

為了故意造成這樣的事情,讓多個進程在沒有中介(沒有鎖定或處理進程)的情況下重復和同時寫入日志,就像文檔建議你不應該那樣。 進程越多,寫入的時間越長(部分取決於緩沖區大小),您就越有可能混合使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM