[英]python : print output of each thread to seperate file
我有幾個線程,每個線程將輸出寫入stdout。 但是我想將每個線程的輸出重定向到彼此獨立的單獨文件中。
我的意思是:
所以我要尋找的是排他地設置每個線程的標准輸出。 但是,設置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.