Я хотел бы изменить класс multiprocessing.Process
так, чтобы он выводил stdout
и stderr
в заданный файл.
Для этого я написал оболочку класса, которая наследуется от multiprocessing.Process
import sys
class procwrapper(mp.Process):
def __init__(self, logfile, target, args=(), kwargs={}):
self.logfile = logfile
super().__init__(target=target, args=args, kwargs=kwargs)
def run(self):
'''
This runs on self.start() in a new process
'''
sys.stdout = open(self.logfile, 'a+')
sys.stderr = open(self.logfile, 'a+')
if self._target:
self._target(*self._args, **self._kwargs)
sys.stdout.close()
sys.stderr.close()
Теперь я также хотел бы написать этот класс таким образом, чтобы мне не приходилось воссоздавать его после запуска. Для этого я написал следующие
class Myproc:
def __init__(self, logfile, target, args=(), kwargs={}):
self.logfile = logfile
self.target = target
self.args = args
self.kwargs = kwargs
def start(self):
procwrapper(self.logfile, self.target, self.args, self.kwargs).start()
Как-то это не выглядит элегантно, можно ли записать их как один класс?