批处理文件 .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 命令行技巧能让你节省时间.避免出错,还能让你记住和复用各种复杂的命令,专注在需要做的事情本身,而不是你要怎么做.以下 ...
随机推荐
- 既生瑜何生亮 access_token VS refresh_token
中国有句老话, 既生瑜何生亮, 既然有我周瑜在世, 为什么老天还要一个诸葛亮啊? 同样的, 众所周知, 在 OAuth 2.0 授权协议中, 也有两个令牌 token , 分别是 access_tok ...
- Terminator--最强Ubuntu终端
个人使用的一个非常好用的Ubuntu终端软件. Terminator的安装和配置 安装 Ubuntu sudo add-apt-repository ppa:gnome-terminator sudo ...
- [WC2021] 表达式求值
考虑我们显然可以对每位分开求解,考虑求出最终答案是\(A_i\)的方案数. 那么我们发现我们这样\(dp\)的话,显然不太行! 会有一个\(i\)的复杂度 但是如果我们做大于等于的话,就只用一遍\(d ...
- Docker Hadoop 配置常见错误及解决办法
Docker Hadoop 配置常见错误及解决办法 问题1:wordcount运行卡住,hadoop 任务运行到running job就卡住了 INFO mapreduce.Job: Running ...
- PHP-FPM运行状态的实时查看及监控详解
https://www.jb51.net/article/97640.htm https://blog.csdn.net/Dr_cokiy/article/details/105580758
- java面试题目偏基础
一.JAVA基础篇-概念1.简述你所知道的Linux:Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机(An ...
- JuiceFS 数据读写流程详解
对于文件系统而言,其读写的效率对整体的系统性能有决定性的影响,本文我们将通过介绍 JuiceFS 的读写请求处理流程,让大家对 JuiceFS 的特性有更进一步的了解. 写入流程 JuiceFS 对大 ...
- GPU随机采样速度比较
技术背景 随机采样问题,不仅仅只是一个统计学/离散数学上的概念,其实在工业领域也都有非常重要的应用价值/潜在应用价值,具体应用场景我们这里就不做赘述.本文重点在于在不同平台上的采样速率,至于另外一个重 ...
- Ecshop 后台导出订单Excel时, 内存溢出的解决方法
今天继续跟大家分享一下,在我配置Ecshop时的问题. 今天的问题是在后台想要导出订单列表Excel时出现的内存溢出.错误提示如下 问题: Fatal error: Allowed memory s ...
- Android 高级UI组件(三)
一.popupWindow 1.AlertDialog和PopupWindow最关键的区别是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManage ...