在python 2.7脚本中,第一个多处理代码用于处理大块numpy
数组。这基本上是图像平面和笛卡尔(世界)平面之间的投影射线框架。称为poo1
的那部分工作正常。
在脚本的进一步内容中,我尝试重现多处理代码以使用此投影射线帧块投影很多图像。
似乎只有4到6名工人在工作,但他们所有人都准备好工作以填充数据。 pool2
创建了worker,它们的内存使用量增长缓慢,只有多达6个使用CPU能力。
注释:
参数信息:
代码简化如下:
def georef(paramsGeoRef):
#Pseudo workflow
"""
- unpack arguments, Frameclock, A1,A2, B1, B2, fileName, D1, D2, D3, P1, P2 <== paramsGeoRef
- Loading tif image
- Evergy convertion
with function and P1, P2
- Proportional projection of the image
- Frameclock, A1, A2
- Evergy convertion
with function and P1, P2
- Figure creation
- Geotiff creation
- export into file figure, geotiff and numpy file
"""
return None
if __name__ == '__main__':
paramsGeoRef = []
for im in imgfiles:
paramsGeoRef.append([Frameclock, A1, A2, B1, B2, fileName, D1 , D2 , D3 , P1 , P2])
if flag_parallel:
cpus = multiprocessing.cpu_count()
cpus = cpus - 1
pool2 = multiprocessing.Pool(processes=cpus)
pool2.map(georef, paramsGeoRef)
pool2.close()
pool2.join()
我尝试了不同的方法,例如:
在之前解开争论:
def star_georef(Frameclock, A1,A2, B1, B2, fileName, D1, D2, D3, P1, P2):
return georef(*paramsGeoRef)
def georef(paramsGeoRef):
#Pseudo workflow...
return None
使用了另一种地图类型:
pool2.imap_unordered()
怎么了?为什么此方法适用于处理numpy
数组,但不适用于此目的?需要处理一个块大小吗?
也许,我可能需要在工作生成器可用时尽快养活他们?
答案 0 :(得分:0)
按照马蒂诺的建议,
我用numpy保存.npy格式的Frameclock,A1和A2争论。然后我将.npy加载到parallelized中。
例如:
def georef(paramsGeoRef):
#Pseudo workflow
"""
- unpack arguments, Frameblock, A1,A2, B1, B2, fileName, D1, D2, D3, P1, P2 <== paramsGeoRef
- load Frameblock from his .npy
- load A1 from his .npy
- load A2 from his .npy
- Loading tif image
- Evergy convertion
with function and P1, P2
- Proportional projection of the image
- Frameclock, A1, A2
- Evergy convertion
with function and P1, P2
- Figure creation
- Geotiff creation
- export into file figure, geotiff and numpy file
"""
return None
即使保存和加载这些文件,也可以大大提高效率!所有工人都在工作。