我正在尝试使用多处理编写Python 2.6(OSX)程序,并且我想填充一个超过默认值32767项的Queue.
from multiprocessing import Queue
Queue(2**15) # raises OSError
Run Code Online (Sandbox Code Playgroud)
Queue(32767)工作正常,但任何更高的数字(例如Queue(32768))都失败了OSError: [Errno 22] Invalid argument
这个问题有解决方法吗?
我正在使用multiprocessingpython 库生成 4 个Process()对象来并行化 CPU 密集型任务。任务(来自这篇伟大文章的灵感和代码)是计算列表中每个整数的质因数。
主要.py:
import random
import multiprocessing
import sys
num_inputs = 4000
num_procs = 4
proc_inputs = num_inputs/num_procs
input_list = [int(1000*random.random()) for i in xrange(num_inputs)]
output_queue = multiprocessing.Queue()
procs = []
for p_i in xrange(num_procs):
print "Process [%d]"%p_i
proc_list = input_list[proc_inputs * p_i:proc_inputs * (p_i + 1)]
print " - num inputs: [%d]"%len(proc_list)
# Using target=worker1 HANGS on join
p = multiprocessing.Process(target=worker1, args=(p_i, proc_list, output_queue))
# Using target=worker2 RETURNS with …Run Code Online (Sandbox Code Playgroud)