python多进程打印输出_多进程打印日志
多進程的日志和多線程的日志有一點區(qū)別。原因是 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()
記錄日志最簡單的方法是將所有的日志發(fā)送給 stderr 。我們可以通過調用函數(shù)?log_to_stderr?來實現(xiàn)。然后我們調用?get_logger?函數(shù)得到記錄器(logger),并把日志級別設置為 INFO。剩下的代碼和原來一樣。這里要說明一下,我并沒有用?join()?函數(shù)。相反, 父線程在退出的時候要顯式地調用?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
10
[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
現(xiàn)在你如果想把日志保存到硬盤,其實還有有些復雜的。你可以參考Python 的官方實例。
總結
以上是生活随笔為你收集整理的python多进程打印输出_多进程打印日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fou循环 php 剩余次数_php f
- 下一篇: vue下拉框值改变_vue select