windows - 多处理池方法挂起但处理方法工作

标签 windows python-2.7 multiprocessing python-multiprocessing pool

我正在尝试让 multiprocessing.Pool 方法工作。它启动并显示所有核心都处于事件状态,尽管最终只是停止而没有完成。

为了解决这个问题,我首先尝试使用一个简单的 for 循环并且成功了(下面的方法 1)。我还尝试使用 multiprocessing.Process 方法,该方法也有效(下面的方法 2)。

但是,方法 3(如下)只是挂起。我在实现 multiprocessing.Pool 方法时哪里可能出错?


import arcpy, os, glob, multiprocessing

# Method 1 works
inws = r'C:\temp\raster_data'
rasters = glob.glob(os.path.join(inws, "*.tif"))

def worker(raster):
    arcpy.arcpy.BuildRasterAttributeTable_management(raster)
    arcpy.AddField_management(raster, "Cover", "TEXT", "", "", 20)

for raster in rasters:
    worker(raster)

# Method 2 works
def mp_worker(raster):
    arcpy.arcpy.BuildRasterAttributeTable_management(raster)
    arcpy.AddField_management(raster, "Cover", "TEXT", "", "", 20)

if __name__ == '__main__':
    inws = r'C:\temp\raster_data'
    rasters = glob.glob(os.path.join(inws, "*.tif"))
    for raster in rasters:
        p = multiprocessing.Process(target=mp_worker(raster))
        p.start()
        p.join()

# Method 3 not working
def mp_worker(raster):
    arcpy.arcpy.BuildRasterAttributeTable_management(raster)
    arcpy.AddField_management(raster, "Cover", "TEXT", "", "", 20)

def mp_handler():
    p = multiprocessing.Pool(8)
    p.map(mp_worker, rasters)

if __name__ == '__main__':
    inws = r'C:\temp\raster_data'
    rasters = glob.glob(os.path.join(inws, "*.tif"))
    mp_handler() 

最佳答案

这一行

p = multiprocessing.Process(target=mp_worker(raster))

应该是这样的

p = multiprocessing.Process(target=mp_worker, args=(raster,))

否则,您在应该引用函数 mp_worker 时调用它。

关于windows - 多处理池方法挂起但处理方法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418013/

相关文章:

windows - Git Bash 和 Pageant 没有使用 key

python - Windows终端中的 'py'和 'python'有什么区别?

Python argparse 忽略连接的参数?

python - 当我与包 <multiprocessing> 并行运行 test_cases 时,它抛出 ValueError : I/O operation on closed file

python - 是否有避免内存深拷贝或减少多处理时间的好方法?

c++ - C/C++ Windows 流量拦截器

python - 为什么这个多线程 python 程序可以正确打印 0 到 99?

python - 如何在Python中读取文档的特定部分

Python多处理,使用对象在进程之间共享数据

windows - 通过 Hook (GIT,Windows,GitStack)推送后 merge 暂存存储库裸存储库