我正在使用多处理来执行一系列串行任务。这些任务在位于不同文件夹中的不同文件上都是相同的。每个任务由对其他几个模块和C ++程序的调用组成。有一个高级包装程序来管理对其他模块/功能的调用。在执行多处理代码的开始,将创建一个列表,其中包含ID和该高级类的实例。然后,一组进程执行任务。
它运行良好,直到出现模糊异常:
Traceback (most recent call last):
File "test_parallel.py", line 197, in <module>
pool_outputs = pool.map(do_calculations, zip(list_instances, list_IDs), )
File "/usr/lib64/python2.6/multiprocessing/pool.py", line 148, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib64/python2.6/multiprocessing/pool.py", line 422, in get
raise self._value
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)
它通常当任务已经进行了很多次(〜200上的第100个任务计划)提出。
该代码的简化版本为:
import multiprocessing
if __name__=="__main__":
which_subfields=range(200)
pool_size = int( multiprocessing.cpu_count() )
run = WrapperAroundModule.run(version = "parallel")
if pool_size == 0:
pool_size=1
list_IDs = list(which_subfields)
lock=multiprocessing.Lock()
runs = []
for _ in which_subfields:
runs.append(copy.deepcopy(run)) …Run Code Online (Sandbox Code Playgroud)