python多程序列印輸出 多程序列印日誌

2021-10-13 05:52:45 字數 1590 閱讀 2022

多程序的日誌和多執行緒的日誌有一點區別。原因是 python 的 logging 包不支援程序共享鎖,所以來自不同的程序的日誌可能會混在一起。我們嘗試一下在上邊的例子裡加乙個基礎日誌。下邊是**:import loggingimport multiprocessingfrom multiprocessing import process, lockdef printer(item, lock):

"""    prints out the item that was passed in    """

lock.acquire()

try:

print(item)

finally:

lock.release()if __name__ == '__main__':

lock = lock()

items = ['tango', 'foxtrot', 10]

multiprocessing.log_to_stderr()

logger = multiprocessing.get_logger()

logger.setlevel(logging.info)

for item in items:

p = process(target=printer, args=(item, lock))

p.start()

記錄日誌最簡單的方法是將所有的日誌傳送給 stderr 。我們可以通過呼叫函式 log_to_stderr 來實現。然後我們呼叫 get_logger 函式得到記錄器(logger),並把日誌級別設定為 info。剩下的**和原來一樣。這裡要說明一下,我並沒有用 join() 函式。相反, 父執行緒在退出的時候要顯式地呼叫 join()。

當你執行上邊的**,會得到像下面這樣的輸出:[info/process-1] child process calling self.run()

tango

[info/process-1] process shutting down

[info/process-1] process exiting with exitcode 0

[info/process-2] child process calling self.run()

[info/mainprocess] process shutting down

foxtrot

[info/process-2] process shutting down

[info/process-3] child process calling self.run()

[info/process-2] process exiting with exitcode 0

[info/mainprocess] calling join() for process process-3

[info/process-3] process shutting down

[info/process-3] process exiting with exitcode 0

[info/mainprocess] calling join() for process process-2

現在你如果想把日誌儲存到硬碟,其實還有有些複雜的。你可以參考python 的官方例項。

python多程序 python多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...

python多程序 Python多程序實踐

建立程序方式如下 可以通過lock鎖機制實現共享鎖,但比較常用的方式還是以上這些方式,效率更高,更安全。使用方式 構造 類方法 使用方式 構造 更多型別支援一般使用manager,支援的型別包括list,dict,namespace,lock,rlock,semaphore,boundedsemap...

python多程序 Python多程序程式設計詳解

本文 在 python 3.6 環境下測試通過。多程序 multiprocessing 模組是在 python 2.6 版本中加入的,和多執行緒 threading 模組類似,都是用來做並行運算的。不過python既然有了threading,為什麼還要搞乙個multiprocessing呢?這是因為...