当前位置: 首页 > news >正文

二次开发python_Python二次开发在行保后处理中的应用续

上文讲到Python二次开发在行保后处理中的应用。

链接:Python二次开发在行保后处理中的应用

当时编写时没有考虑到后处理效率的问题。比如一个项目中单次结果处理需要123个点的结果,则需要按顺序执行meta进行结果后处理,每次运行meta提取结果的时间约为5s左右。则顺序进行所有结果提取的时间约为615s,大概10分钟左右。这个效率过于低下。

d3ea15e7e8bb72d664604c3d254c5632.png

因此对脚本进行优化,需要用到Python的多进程管理包multiprocessing

import osimport timeimport shutilfrom multiprocessing import Poolsesfile = r'F:\08_Project\08_Pedpro\PedPro\getHIC15.ses'batfile = r'F:\08_Project\08_Pedpro\PedPro\runmeta.bat'dir = os.getcwd()subdirall = []for root,dirs,files in os.walk(dir):  subdirall.append(root)subdircalcu = subdirall[1:]def calulateHIC(case):  os.chdir(case)  shutil.copy(sesfile,case)  shutil.copy(batfile,case)  os.system('runmeta')  print(os.getcwd())if __name__ == "__main__":  pool = Pool(4)  # 创建拥有4个进程数量的进程池  pool.map(calulateHIC, subdircalcu)  pool.close()  # 关闭进程池,不再接受新的进程  pool.join()  # 主进程阻塞等待子进程的退出

01d2e365ab227dc6744c1114fec8b71e.png

其中Pool(4)设置为4个进程,这个可以根据电脑配置情况进行调整。比如可以设置为Pool(40)即同时进行40个meta后处理进程。则整个后处理的时间大概为15s,约0.25分钟。效率大概提高40倍左右。 源代码:
import osimport timeimport shutilimport xlwings as xwresultsfile = r'F:\08_Project\08_Pedpro\TS\TotalHIC.xlsx'app = xw.App(visible=True,add_book=False)wb = app.books.add()wb.save(resultsfile)wb = app.books.open(resultsfile)sht = wb.sheets[0]  # or wb.sheets["sheet1"]time.sleep(1)for i , num in enumerate(range(14,-1,-1),start=2):  sht.range("A"+ str(i)).value = "R" + str(num)for i , character in enumerate([chr(i) for i in range(86,65,-1)],start=-10):  sht.range(character + "1").value = "C" + str(i)for i in range(2,17):  for j in range(2,23):    sht.range((i,j)).color = (166, 166, 166)sht.range('A1:V16').row_height =28sht.range('A1:V16').column_width =5list1 = []for i, num in enumerate(range(14,-1,-1),start=1):  list1.append("R" + str(num))rowdict = dict(zip(list1,range(2,17,1)))list3 = []for i , character in enumerate([chr(i) for i in range(86,65,-1)],start=-10):  list3.append("C" + str(i))columdict = dict(zip(list3,[chr(i) for i in range(86,65,-1)]))fill_red = (255, 0, 0)fill_brown = (151, 72, 6)fill_orange = (244, 119, 16)fill_yellow = (255, 255, 0)fill_green = (0, 176, 80)dir = os.getcwd()subdirall = []for root,dirs,files in os.walk(dir):  #print('root_dir:',root)  subdirall.append(root)subdircalcu = subdirall[1:]#print(subdircalcu)for i , case in enumerate(subdircalcu,start=1):#  print(i)  os.chdir(case)  with open('getHIC15.ses.results','r') as g:    for line in g.readlines():      if "HIC15" in line:        HIC15 = line.split(',')[2]        position = case.split("\\")[-1]        c_position = position.split("_")[1]        r_position = position.split("_")[2]        r_posit = "R" + str(abs(int(r_position)))        if int(r_position) >= 0:          c_posit = "C" + c_position        else:          c_posit = "C-" + c_position        sht.range(columdict[c_posit] + str(rowdict[r_posit])).value = round(float(HIC15))        if float(HIC15) >= 1700:          sht.range(columdict[c_posit] + str(rowdict[r_posit])).color = fill_red        elif float(HIC15) >= 1350 and float(HIC15) < 1700:          sht.range(columdict[c_posit] + str(rowdict[r_posit])).color = fill_brown        elif float(HIC15) >= 1000 and float(HIC15) < 1350:          sht.range(columdict[c_posit] + str(rowdict[r_posit])).color = fill_orange        elif float(HIC15) >= 650 and float(HIC15) < 1000:          sht.range(columdict[c_posit] + str(rowdict[r_posit])).color = fill_yellow        else:          sht.range(columdict[c_posit] + str(rowdict[r_posit])).color = fill_green  g.close()  print(os.getcwd())  time.sleep(0.025)wb.save()wb.close()app.quit()
最终运行效果:

1a154cb620e04df74afdaf04d5311fa8.gif

3583a52e7ff702403746b2a00e72ff2f.png

相关文章:

  • rust核电分解机在哪里_腐蚀工厂在哪?全工厂地点位置一览
  • 返回类型_oracle数据库中自定义类型function 返回复杂自定义类型Table
  • 日期函数month_Excel办公技巧:SUMPRODUCT函数用法解析
  • python导出千万数据到excel_python将大量数据导出到Excel中的方法
  • erdas叠加显示_利用erdas对遥感影像进行分类具体步骤
  • python对象属性的继承_python入门(十四):面向对象(属性、方法、继承)
  • python 几何教学_opencv-python-学习笔记九(图像几何转换)
  • c++builder安装opengl组件_刚下完的游戏竟然缺少组件?是游戏出了问题还是系统出了问题...
  • mysql的root用户密码_如何修改MySQL root用户密码
  • mysql 授权语句格式_mysql语句的授权
  • mysql charset=utf-8_mysql数据库charset=utf-8
  • nodejs mysql 断线重连_nodejs中mysql断线重连
  • mac mysql.tar.gz_mac 安装 mysql.tar.gz
  • debian 编译mysql源码_debian 下编译mysql源码出错【求助】
  • python linspace函数_c语言中的python linspace++
  • [deviceone开发]-do_Webview的基本示例
  • 2019年如何成为全栈工程师?
  • Java方法详解
  • JS字符串转数字方法总结
  • Laravel 实践之路: 数据库迁移与数据填充
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Redis 中的布隆过滤器
  • Spring Boot快速入门(一):Hello Spring Boot
  • STAR法则
  • 测试如何在敏捷团队中工作?
  • 机器学习学习笔记一
  • 记一次用 NodeJs 实现模拟登录的思路
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 那些年我们用过的显示性能指标
  • 前端自动化解决方案
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 用Canvas画一棵二叉树
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 安徽锐锋科技IDMS系统简介
  • # 数据结构
  • #etcd#安装时出错
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十六)Flask之蓝图
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Sublime Text3配置Lua运行环境
  • (转)用.Net的File控件上传文件的解决方案
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core 中的路径问题
  • .net 发送邮件
  • .net 后台导出excel ,word
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net6 Api Swagger配置
  • [Android] Implementation vs API dependency
  • [Android] 240204批量生成联系人,短信,通话记录的APK