Как написать единый класс процесса, который можно запускать несколько раз? - PullRequest
0 голосов
/ 08 мая 2020

Я хотел бы изменить класс 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()

Как-то это не выглядит элегантно, можно ли записать их как один класс?

...