Python 递归多处理行为呈线性?

Python recursive multiprocessing behaving linear?

from multiprocessing import Process, Queue

class A:
    def F1(self, q, code1, code2):
        data = -1
        q.put(data)

    def F2(self, q, code1):
        q2 = Queue()
        for i in range(10):
            '''
                some processing here
            '''
            p = Process(target=self.F1, args=(q2, i, j))
            p.start()
            print(q2.get())
        p.join()

    def Handler(self):
        q = Queue()
        for i in range(10):
            p = Process(target=self.F2, args=(q, i))
            p.start()
            print(q.get())
        p.join()

if __name__ == "__main__":
    app = A()
    app.Handler()

执行后我观察到代码以线性方式执行,没有使用多处理。我想不通原因?

问题在于,通过在 for 循环中调用 q2.get(例如),您会等待每个进程完成,然后再开始另一个进程。您的调度员可以按如下方式更改,让所有 10 个调度员同时在后台工作。

def F2(self, q, code1):
    q2 = Queue()
    processes = []
    # start all of the processes
    for i in range(10):
        '''
            some processing here
        '''
        p = Process(target=self.F1, args=(q2, i, j))
        p.start()
        processes.append(p)
    # get data for all processes. buggy because an exception in the
    # child is not caught and will cause program to hang
    for i in range(10):
        print(q2.get())
    #dispose of the processes
    for p in processes:
        p.join()

multiprocessing 已经有 Pool class 可以为您完成工作并处理启动异常。