python:在类中使用多重处理的正确方法

时间:2019-06-18 14:41:38

标签: python multiprocessing python-multiprocessing

我正在寻找将多处理模块过程处理包装在类中的正确方法。 这是我的第一次尝试:

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() 

当我开始此操作时,有时会出现酸洗错误,有时会起作用。我认为记录器是错误的原因。 所以我的问题-当我注意不要在类中使用像记录器之类的非标对象时,将多处理包装在类中的这种方法是一种正确的方法吗?

0 个答案:

没有答案