欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

arcmap下的多进程脚本

程序员文章站 2023-12-26 17:25:33
...

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

相关标签: arcgis

上一篇:

下一篇: