我正在开发一个相当大的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