2
# 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)启动程序,但输出没有我预期的那么快(似乎只有一个进程在运行)。

我的代码有什么问题吗?

4

1 回答 1

4

是的,您一次只运行一个进程,您正在等待每个进程终止,然后再开始下一个进程;

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

于 2012-09-23T07:51:05.427 回答