批处理文件 .bat 并行Arcpy脚本提高效率的思路-提升版
前言
我在之前的博客园博客里,阐述了如何编写Arcpy脚本,如何利用Windows bat批处理脚本同时打开多个cmd窗口,以实现并行处理,提高数据处理效率。但是上述博客仍然存在着:1、需要编写多个Arcpy脚本;2、参数修改麻烦。最近做了一些修改,解决了上述问题。现进行分享。
Arcpy脚本
借鉴知乎批处理教程,脚本分为运行参数准备函数定义、Arcpy掩膜提取函数定义、循环实现三大部分。
导入库
import arcpy
from arcpy.sa import *
import time, os, glob, sys
函数定义
首先定义运行参数准备函数,将所有输入输出参数存储到一个嵌套列表中,方便掩膜提取函数调用。然后定义掩膜提取函数。
# 函数用于准备掩膜提取工具运行参数
def pre_parameter(inpath, outpath, mask):
parameters = []
infiles = glob.glob("*.tif")
for infile in infiles:
inRaster = infile
inMaskData = mask
outRaster = os.path.join(outpath, infile)
parameter = [inRaster, inMaskData, outRaster]
parameters.append(parameter)
return parameters
# Arcpy函数掩膜提取
def Extract_by_Mask(Parameter):
# Set local variables
inRaster = Parameter[0]
inMaskData = Parameter[1]
outRaster = Parameter[2]
# Execute ExtractByMask
outExtractByMask = ExtractByMask(inRaster, inMaskData)
# Save the output
outExtractByMask.save(outRaster)
print(outRaster, 'has finshed')
循环实现
利用sys.argv语句获取命令行输入的参数,调用pre_parameter函数生成掩膜提取函数运行参数列表。然后利用for循环,根据start与end处理特定文件数。通过多个cmd窗口打开多个脚本分别运行,便可以同时处理多个文件,提高效率。本例中,若只运行一个脚本需要70多个小时,同时运行7个脚本只需要10个小时左右。
inpath = os.path.abspath(sys.argv[1])
outpath = os.path.abspath(sys.argv[2])
inf = os.path.abspath(sys.argv[3]) # 掩膜文件,可以是shp或者raster
# 这里根据处理的文件数量改动,可以分几部分打开多个shell运行多个脚本提高速度
start = int(sys.argv[4])
end = int(sys.argv[5])
os.chdir(inpath)
# Set the current workspace
arcpy.env.workspace = (inpath)
# Set the snapRaster
arcpy.env.snapRaster = (inf)
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
para = pre_parameter(inpath, outpath, inf)
StartTime = time.time()
print('start Mask from %d to %d'%(start, end))
for i in range(start, end):
time1 = time.time()
Extract_by_Mask(para[i])
time2 = time.time()
print(i, 'has finished! costed ' + str(time2 - time1) + ' Seconds...',)
EndTime = time.time()
print('Elapsed: ' + str(EndTime - StartTime) + ' Seconds...')
批处理(.bat)脚本
第一句要设置为你的Arcpy python.exe所在完整路径。要完全按照顺序依次输入: inpath(输入路径), outpath(输出路径), inf(掩膜文件), start(第一个处理文件的编号), end(最后一个处理文件的编号)
命令的具体含义请参考参考这篇博客 。
:: change your work folder to the path of arcpy
cd/d D:\Python27\ArcGIS10.4
:: open some cmd and run the script
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 0 5
:: time delay
choice /t 5 /d y
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 5 10
choice /t 5 /d y
start cmd /k python.exe C:\Users\xxx\Desktop\Mask\Extract_by_Mask.py "C:/Users/xxx/Desktop/NW" "C:/Users/xxx/Desktop/NW/test" "C:/Users/xxx/Desktop/NW/mask.shp" 10 16
以上思路或许还有更加优秀的解决办法,欢迎牛人大佬朋友下方留言交流。
批处理文件 .bat 并行Arcpy脚本提高效率的思路-提升版的更多相关文章
- 批处理文件(.bat)并行Arcpy脚本提高效率的思路
Arcpy提供数据处理的方便接口,但一个Arcpy脚本通常只运行于一个核上.现在电脑通常是多核乃至多处理器,如果能将任务分解为可同时进行的若干任务,便可通过并行充分利用电脑性能. 折腾了python并 ...
- UVA12325-注意提高效率的思路
题目大意:你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物? 方法:其实也没 ...
- .Net cxy 提高效率
Visual Studio Visual Studio Productivity Power tool: VS 专业版的效率工具. Web Essentials: 提高开发效率,能够有效的帮助开发人员 ...
- 利用mock提高效率
利用mock提高效率 谈到mock,就不得不讲前后端分离.理想情况下前后端不分离,由全栈的人以product和infrastructure的维度进行开发,效率是最高的.近些年来业务的复杂度越来越高,真 ...
- sql的简单提高效率方法
少用in操作(效率极差),尽量用表关联代替 select要指定列,不要*(*会读入所有数据,而指定列则只提取涉及的列,减少io) 尽量有where(减少读取量),where操作列尽量有索引(加快查询) ...
- 【转】.NET程序员提高效率的70多个开发工具
原文:.NET程序员提高效率的70多个开发工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件 ...
- cmake:善用find_package()提高效率暨查找JNI支持
cmake提供了很多实用的cmake-modules,通过find_package()命令调用这些modules,用于写CMakeLists.txt脚本时方便的查找依赖的库或其他编译相关的信息,善用这 ...
- .NET程序员提高效率的70多个开发工具
工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环节, ...
- 让你提高效率的 Linux 技巧
想要在 Linux 命令行工作中提高效率,你需要使用一些技巧. 巧妙的 Linux 命令行技巧能让你节省时间.避免出错,还能让你记住和复用各种复杂的命令,专注在需要做的事情本身,而不是你要怎么做.以下 ...
随机推荐
- 多线程05.thread不知道的知识
Thread thread = new Thread(); // init(null, null, "Thread-" + nextThreadNum(), 0); //init( ...
- ElasticJob分布式任务调度应用v2.5.2
为何要使用分布式任务调度 **本人博客网站 **IT小神 www.itxiaoshen.com 演示项目源码地址** https://gitee.com/yongzhebuju/spring-task ...
- SpringBoot集成邮件发送
一:简述 在日常中的工作中难免会遇到程序集成邮件发送功能.接收功能:此篇文章我将使用SpringBoot集成邮件发送功能和接收功能:若对邮件一些基本协议和发送流程不懂的请务必参考我之前写的博客或者浏览 ...
- 6.K8s集群升级、etcd备份和恢复、资源对象及其yaml文件使用总结、常用维护命令
1.K8s集群升级 集群升级有一定的风险,需充分测试验证后实施 集群升级需要停止服务,可以采用逐个节点滚动升级的方式 1.1 准备新版本二进制文件 查看现在的版本 root@k8-master1:~# ...
- c# Quartzs定时器的简单使用
使用背景: 首先想到倒计时,定时任务.大家想到的肯定就是定时器.那么定时器在web和winfrom程序中有着很大的作用.那在服务器端有没有像定时器一样的存在呢. 有了这些需求,我找到了第三方的组件 Q ...
- 在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
在基于DevExpress的多文档窗口界面中,我们一般使用XtraTabbedMdiManager来管理多文档窗口的一些特性,如顶部菜单,页面的关闭按钮处理,以及一些特殊的设置,本篇随笔介绍这些特点, ...
- 【NOIP 2018】摆渡车
前情提要 是的 我终于回来补坑了 一年了哇 你这个鸽子王 斜率优化版本 今天在复习斜率优化的时候才想起来这个题 定义就不设了 大家想看可以看上面那个原版 怎么斜率优化呢? 我们考虑\(i\)点是当前的 ...
- [USACO07MAR]Face The Right Way G
发现选定一个长度后,怎么翻转是固定的. 那我们直接选定一个长度去操作就行. 优化操作过程 类似于堆里打持久化标记一样的感觉. [USACO07MAR]Face The Right Way G // P ...
- Codeforces 436D - Pudding Monsters(dp)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 这题数据范围有点迷惑啊--乍一看 \(\mathcal O(nm)\) 过不去,还以为是正解是 \(\mathcal O(n+m ...
- R语言与医学统计图形-【32】海盗图、词云图、日历图
1.海盗图 参数众多,其语法与基础包类似. 基础图. #devtools::install_github('ndphillips/yarrr') #install.packages('yarrr') ...