当前位置:网站首页>arcmap下的多进程脚本

arcmap下的多进程脚本

2022-08-11 05:33:00 我是无名的我

arcmap中多为CPU密集运算,最好的方式为使用多进程而不是多线程(IO密集)

问题:python多进程无法正常在arcmap下正常开启
原因:arcmap下信息处理时,调用的时内置的py内核,但是一个arcmap进程只能调用一个py内核。
解决:使用外置的py内核,为保证兼容性,用2.7X 32位,必须把工作代码跟main函数分开。
实例代码
代码简单实现了数据的输入,并调用了arcpy。

# -*- coding: utf-8 -*-
""" Created on Thu Mar 12 19:12:59 2020 @author: zonggongban HGH """
import arcpy
import os
import sys


def worker_function(x):
    name = os.path.join('E:/p', str(x) + '.txt')
    with open(name, 'w') as f:
        f.write(sys.version)
    arcpy.AddMessage(999)
    print(arcpy.GetMessages())
    return name

将上述脚本命名为worker.py

# -*- coding: utf-8 -*-
""" Created on Thu Mar 12 19:12:59 2020 @author: zonggongban HGH """
import os
import arcpy
import multiprocessing
import time
import worker


def main():
    
   	''' 调用外置py内核 '''
    multiprocessing.set_executable('G:/anaconda27/pythonw.exe')

    pool = multiprocessing.Pool()
    time.sleep(0.0001)

    for i in [1, 2]:
        pool.apply_async(work.worker_function, (i,)) # args are passed as a list

    pool.close()
    pool.join()


if __name__=='__main__':
    
    asters = arcpy.GetParameterAsText(0)
    main()

在主函数调用work.py

参考
can-multiprocessing-with-arcpy-be-run-in-a-script-tool
Create a script tool that uses multiprocessing

原网站

版权声明
本文为[我是无名的我]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_39821554/article/details/105435635