1
# 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)來啓動程序,但輸出速度沒有我想象的那麼快(似乎只有一個進程正在運行)。爲什麼我的python多進程代碼運行速度很慢?
我的代碼有問題嗎?
謝謝,這是有道理的,但如果我想手動使用它,我應該在哪裏放入連接方法?我希望我的主進程等待這些子進程。 – MrROY
棘手的一個。如果可以等待所有進程終止,那麼就像現在這樣循環並將進程添加到數組中。當你完成所有的開始時,只需循環數組和Join()它們。如果主進程要繼續執行其他事情,則需要偶爾(主循環)運行數組,並以超時0運行Join(),以跟蹤哪些進程已終止並將其從數組中移除。邊注;我不知道有什麼方法在子進程終止時得到通知,但我總是使用進程池,因此可能有一種我不知道的方式。 –
感謝Joachim。 – MrROY