簡體   English   中英

python:將每個線程的輸出打印到單獨的文件

[英]python : print output of each thread to seperate file

我有幾個線程,每個線程將輸出寫入stdout。 但是我想將每個線程的輸出重定向到彼此獨立的單獨文件中。

我的意思是:

  • Thread1將每個打印,每個異常和每個其他輸出寫入file1.log
  • Thread2將每個打印,每個異常和每個其他輸出寫入file2.log
  • 等等。

所以我要尋找的是排他地設置每個線程的標准輸出。 但是,設置stdout僅在全局范圍內起作用,這意味着Thread1和Tread2將始終寫入相同的已定義stdout。 我還沒有發現如何做到這一點。 python日志記錄對此不適當,因為我已經檢查過了。

我怎樣才能做到這一點?

編輯:基於dbra的答案,我編寫了以下小程序來演示日志記錄:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from multiprocessing import Process
import sys

class SubRunner(object):

    def print_something( self, name ):
        print name + ": print something"


class MainRunner(object):

    def __init__(self, name):        
        self.sub_runner = SubRunner()
        self.name = name


    def runme(self,dummy):
        sys.stdout = open('example_' + self.name + ".log", "w")
        self.sub_runner.print_something( self.name )


#Main program
m1 = MainRunner("M1")
m2 = MainRunner("M2")

p1 = Process(target=m1.runme, args=('',) )
p2 = Process(target=m2.runme, args=('',) )

p1.start()
p2.start()

p1.join()
p2.join()

線程共享相同的文件描述符表,您不能將標准輸出重定向到其他文件。

相反,它可以通過使用多處理而不是線程庫來工作, 這里是不同pid的不同文件的示例

您創建了一個進程而不是一個不共享內存空間的線程。 因此,您只需在子進程中設置sys.stdout,就不會影響其他子進程或主進程。

暫無
暫無

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

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