# 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)来启动程序,但输出并不像我预期的那么快(似乎只有一个进程正在运行)。
我的代码有问题吗?
答案 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。