Python: правильный способ использовать многопроцессорность внутри класса - PullRequest
0 голосов
/ 18 июня 2019

Я ищу правильный способ обернуть обработку процессов многопроцессорного модуля внутри класса.Это моя первая попытка:

import logging
import multiprocessing
from multiprocessing import Pipe

class MP_Wrapper:
    def __init__(self, some_input):
        self.input = some_input
        self.logger = logging.getLogger('MP_Wrapper')
        return

    def worker(self, some_input, conn):
        print ('worker')
        try:
            if some_input in ['123']:
                self.worker_123(some_input)
            else:
                raise ValueError('unknown input:{}'.format(some_input))
        except:
            self.logger.exception('ERROR in instance_to_process')
        print ('EXIT')
        conn.send('EXIT SEND')
        return

    def worker_123(self, some_input):
        print ('worker 123:{}'.format(some_input))
        #do something else
        return

    def start_process(self):
        parent_conn, child_conn = Pipe()
        p = multiprocessing.Process(target=self.worker, args=(self.input, child_conn,))
        p.start()
        print(parent_conn.recv())
        p.terminate()
        p.join()
        print('JOINED')
        return


def main():
    xi = MP_Wrapper('123')
    xi.start_process()
    return


if __name__ == '__main__':
    main() 

Когда я начинаю это, я иногда получаю ошибку засоления, иногда это работает.Я думаю, что логгер является причиной ошибки.Итак, мой вопрос - это ли способ правильно обернуть многопроцессорную обработку внутри класса, когда я стараюсь не использовать unpickaple-объекты, такие как регистратор внутри класса?

...