为什么我的python多进程代码运行速度很慢?

时间:2012-09-23 07:41:49

标签: python python-2.7

# multi-processes
from multiprocessing import Process, Queue
class Worker(object):
    def __init__(self, queue):
        self.queue = queue
        self.process_num = 10 <------------ 10 processes
        self.count = 0

    def start(self):
        for i in range(self.process_num):
            p = Process(target = self.run)
            p.start()
            p.join()

    def run(self):
        while True:
            self.count += 1
            user = self.queue.get()
            # do something not so fast like time.sleep(1)
            print self.count
            if self.queue.empty():
                break

我使用 Worker()。start(queue)来启动程序,但输出并不像我预期的那么快(似乎只有一个进程正在运行)。

我的代码有问题吗?

1 个答案:

答案 0 :(得分:3)

是的,您一次只运行一个进程,等待每个进程在开始下一个进程之前终止;

def start(self):
    for i in range(self.process_num):
        p = Process(target = self.run)
        p.start()                       <-- starts a new process
        p.join()                        <-- waits for the process to terminate

换句话说,你正在启动10个进程,但是第二个进程在第一个进程终止之前不会启动,依此类推。

对于您尝试执行的操作,最好不要手动使用Process,而是使用Process Pool