Я ищу правильный способ обернуть обработку процессов многопроцессорного модуля внутри класса.Это моя первая попытка:
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-объекты, такие как регистратор внутри класса?