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)を使用してプログラムを開始しましたが、出力は期待したほど高速ではありません (実行中のプロセスは 1 つだけのようです)。

私のコードに問題はありますか?

4

1 に答える 1

4

はい、一度に 1 つのプロセスしか実行していません。次のプロセスを開始する前に、各プロセスが終了するのを待っています。

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 個のプロセスを開始していますが、最初のプロセスが終了するまで 2 番目のプロセスは開始されません。

あなたがやろうとしていることについては、Process手動で使用せず、代わりにProcess Poolを使用することをお勧めします。

于 2012-09-23T07:51:05.427 に答える