多程序的日誌和多執行緒的日誌有一點區別。原因是 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呢?這是因為...