我正在開發一個相當大的Python項目,要求將計算密集型後臺任務之一卸載到另一個內核,以便主服務不會變慢。當使用multiprocessing.Queue
來傳達工作進程的結果時,我遇到了一些顯然很奇怪的行爲。爲了比較目的,對threading.Thread
和multiprocessing.Process
使用相同的隊列,該線程工作得很好,但是在將大項放入隊列後進程無法加入。注意:multiprocessing.Queue項目的最大尺寸?
import threading
import multiprocessing
class WorkerThread(threading.Thread):
def __init__(self, queue, size):
threading.Thread.__init__(self)
self.queue = queue
self.size = size
def run(self):
self.queue.put(range(size))
class WorkerProcess(multiprocessing.Process):
def __init__(self, queue, size):
multiprocessing.Process.__init__(self)
self.queue = queue
self.size = size
def run(self):
self.queue.put(range(size))
if __name__ == "__main__":
size = 100000
queue = multiprocessing.Queue()
worker_t = WorkerThread(queue, size)
worker_p = WorkerProcess(queue, size)
worker_t.start()
worker_t.join()
print 'thread results length:', len(queue.get())
worker_p.start()
worker_p.join()
print 'process results length:', len(queue.get())
我已經看到了,這工作正常size = 10000
,但worker_p.join()
的size = 100000
掛起。 multiprocessing.Process
實例可以在multiprocessing.Queue
中放置一些固有的大小限制嗎?或者我在這裏犯了一些明顯的根本錯誤?
僅供參考,我在Ubuntu 10.04上使用Python 2.6.5。
謝謝,這正是我遇到的問題,並且在加入之前在父線程中出列似乎工作正常。 – 2012-04-05 15:42:25
非常感謝你。 (')(')(')()'' – Catbuilts 2016-09-30 11:22:52