我正在寻找将多处理模块过程处理包装在类中的正确方法。 这是我的第一次尝试:
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()
当我开始此操作时,有时会出现酸洗错误,有时会起作用。我认为记录器是错误的原因。 所以我的问题-当我注意不要在类中使用像记录器之类的非标对象时,将多处理包装在类中的这种方法是一种正确的方法吗?