我在自由职业项目中使用自己的记录器类来通过ftp访问日志并检查错误。它为每个进程写一个单独的文件,通过os.getpid()函数输出到stdout。 这对python多进程库很有用。但是我比多处理更多地进行多线程处理,而且我不知道如何改进我的代码,为每个超出stdout的线程编写一个单独的文件。
class Logger(object):
def __init__(self, realstdout, path='logs/'):
today = datetime.datetime.now().isoformat()
if path[-1] != '/':
path = path+'/'
os.mkdir(path + today)
self.pid = str(os.getpid())
self.handler = open(path + today + '/' + self.pid + '.txt', 'w', buffering=0)
self.stdout = realstdout
def write(self, buf):
if buf == '\n' or buf == '(Pdb)':
return
buf = buf.replace('\n', '#')
self.handler.write("[{0}] [{1}] ".format(datetime.datetime.today(), self.pid) + buf + "\n")
self.stdout.write("[{0}] ".format(self.pid) + buf + "\n")
def flush(self):
pass
def __del__(self):
self.handler.close()
怎么做?
答案 0 :(得分:0)
如果使用相同的策略,为每个worker记录一个单独的日志文件,那么每个线程必须有某种标识符。由于每个线程都在同一个进程中执行,因此它们都具有相同的进程ID。
我相信您可以使用线程标识来识别它:
>>> threading.current_thread()
<_MainThread(MainThread, started 139944996378368)>
>>> threading.current_thread().ident
139944996378368
线程感知记录器可能能够使用以下命令创建唯一标识符:
self.pid = str(threading.current_thread().ident)