files=['E:/select/r0_51x47.txt',
'E:/select/r0_79x77.txt',
'E:/select/r0_89x65.txt',
'e:/select/r0_101x109.txt',
'e:/select/r0_104x88.txt',
'e:/select/r0_127x80.txt',
'e:/select/r0_139x136.txt',
'e:/select/r0_204x209.txt']
print ('')
print ('###################################')
pool_costtime_start= datetime.datetime.now()
pool = Pool()#len(files)
pool.map(ExtractRidge, files)
pool.close()
pool.join()
print ('Pool Cost time: '+\
str((datetime.datetime.now() - pool_costtime_start).seconds)+\
' seconds')
len(files)>CPU数(我的是win7+i5),执行过程中某个进程执行到arcgis提供的函数时,会无限期等待着,如下图:
我的解决方法是:直接设置Pool的大小,即
pool=Pool(len(files))
这样就不会出现之前的情况了,这是成功的结果
同样的,我还测试了用
pool=ThreadPool() 或者
pool=ThreadPool(len(files))
实现多线程的并行计算。这个就更糟糕了,提示:
提示的函数,z_limit是第三个参数,默认值为“”
arcpy.gp.Fill_sa(dem, fill, "")
但是,在指定进程数的情况下确没问题。我的问题是:
1. 对于CPU密集型的计算来说,进程数是否需要严格指定?例如我的第一个情况下,需要指定进程数才能运算成功,默认由计算机CPU个数来决定的情况就会down机;
2. 是否多线程对于CPU密集型的计算容易出错?因为我用的arcgis模块计算量都很大;
**请路过的大神多多指教!**