在python文档中,它表示如果maxsize小于或等于零,则队列大小是无限的。我也试过maxsize=-1
。但事实并非如此,程序将挂起。所以作为一个解决办法,我创建了多个Queues
来处理。但这并不理想,因为我需要处理更大的列表,然后必须创建越来越多的Queue()
并添加额外的代码来处理元素。在
queue = Queue(maxsize=0)
queue2 = Queue(maxsize=0)
queue3 = Queue(maxsize=0)
PROCESS_COUNT = 6
def filter(aBigList):
list_chunks = list(chunks(aBigList, PROCESS_COUNT))
pool = multiprocessing.Pool(processes=PROCESS_COUNT)
for chunk in list_chunks:
pool.apply_async(func1, (chunk,))
pool.close()
pool.join()
allFiltered = []
# list of dicts
while not queue.empty():
allFiltered.append(queue.get())
while not queue2.empty():
allFiltered.append(queue2.get())
while not queue3.empty():
allFiltered.append(queue3.get())
//do work with allFiltered
def func1(subList):
SUBLIST_SPLIT = 3
theChunks = list(chunks(subList, SUBLIST_SPLIT))
for i in theChunks[0]:
dictQ = updateDict(i)
queue.put(dictQ)
for x in theChunks[1]:
dictQ = updateDict(x)
queue2.put(dictQ)
for y in theChunks[2]:
dictQ = updateDict(y)
queue3.put(dictQ)
问题的发生是因为在join调用之前没有处理}对象的大小不够大有关。
因此,将您的
Queue
。 使用multiprocessing.Queue
时,应先清空它,然后再尝试加入进纸器进程。Process
等待放入Queue
中的所有对象在终止之前被刷新。我不知道为什么即使是大尺寸的Queue
也是如此,但这可能与下面的{get
调用放在pool.join
之前应该可以解决您的问题。在一个问题是为什么你需要自己来处理沟通?如果考虑到以下因素,您可以让
^{pr2}$Pool
为您管理:这样可以避免这种错误。在
编辑 {even}你可以通过使用cdeven函数进一步减少你的代码。 如果块太大,可能会在结果的酸洗过程中出错(如您的评论中所述)。因此,您可以使用
map
来减小调整缝隙的大小:相关问题 更多 >
编程相关推荐