自己python程序的并行修改
遇到运算量大的程序,学习了下python并行运算的方法,在自己的程序上进行了修改,看看是否可以增加效率。原始代码是:
- import gt_apps as my_apps
- f=file('sample.txt','r')
- for i in range(1,114):
- print i
- line=f.readline()
- source=line.rstrip()
- print source.split(' ')
- name = source.split(' ')[0]
- ra = source.split(' ')[1]
- dec = source.split(' ')[2]
- rad = 10
- input = name+".fits"
- output = name+"_gti.fits"
- my_apps.maketime['scfile'] = "spacecraft.fits"
- my_apps.maketime['filter'] = "(DATA_QUAL>0)&&(LAT_CONFIG==1)"
- my_apps.maketime['roicut'] = "no"
- my_apps.maketime['evfile'] = input
- my_apps.maketime['outfile'] = output
- my_apps.maketime.run()
进行了如下优化:
1)用readlines代替readline一次性读出所有数据。
2)for循环改用for line in lline的形式
3)将for循环里的操作内容包装成一个子函数
4)将for循环用pool.map()代替
- import gt_apps as my_apps
- import numpy as np
- import time
- from multiprocessing import Pool
- def mktime(obj):
- source=obj.rstrip()
- name = source.split(' ')[0]
- ra = source.split(' ')[1]
- dec = source.split(' ')[2]
- input = name+"_filtered.fits"
- output = name+"_gti.fits"
- my_apps.maketime['scfile'] = "spacecraft.fits"
- my_apps.maketime['filter'] = "(DATA_QUAL>0)&&(LAT_CONFIG==1)"
- my_apps.maketime['roicut'] = "no"
- my_apps.maketime['evfile'] = input
- my_apps.maketime['outfile'] = output
- print name,ra,dec
- my_apps.maketime.run()
- if __name__ == '__main__':
- f=file('thread.txt','r')
- ll=np.genfromtxt('sample.txt',dtype=None)
- lline=f.readlines()
- print ll,lline
- start_time = time.time()
- pool = Pool(5)#number of threads
- pool.map(mktime,lline)#fuction and par
- pool.close()
- pool.join()
- print "Done,Time taken: {}".format(time.time()-start_time)
后来经过一夜运行,发现一个问题,maketime.run运行的时候才会调用参数,因此map以后,maketime的各个参数很快被再次赋值,导致可能多个maketime运行的是同一套参数。尚未找到解决办法,临时通过限制进程数量确保开始运行的时候的各个进程间参数不一样,由于各个进程运行速度不一,因此后续进行应该可以顺利完成。或者可以通过一次性输入所有参数并执行的方式确保每次参数都不一样,如os.system('gtmktime par=……')(由于mktime.run就是运行gtmktime)。
(2016-1-5 13:35)最后通过用系统命令单行参数直接赋值运行的方式,成功实现了并行计算。
自己python程序的并行修改的更多相关文章
- python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)
昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...
- Python程序中的进程操作--—--开启多进程
Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...
- 【python之路2】CMD中执行python程序中文显示乱码
在IDLE中执行下面代码,中文显示正常: # -*- coding:utf-8 -*- st=raw_input("请输入内容")print st 但在CMD中执行e:\hello ...
- Python 程序员经常犯的 10 个错误
关于PythonPython是一种解释性.面向对象并具有动态语义的高级程序语言.它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得... 关于Python Python是一种解释性.面向对 ...
- Python程序的常见错误(收集篇)
关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...
- 编写高质量代码--改善python程序的建议(六)
原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修 ...
- 编写高质量代码--改善python程序的建议(八)
原文发表在我的博客主页,转载请注明出处! 建议四十一:一般情况下使用ElementTree解析XML python中解析XML文件最广为人知的两个模块是xml.dom.minidom和xml.sax, ...
- 3.第一个python程序
学习任何一门语言的第一步,首先要写个'hello world',这算是程序员的一个传统.但在写之前,还有注意几个问题. 首先,python是一门脚本语言,而脚本语言的特点就是:我们写的代码会先由解释器 ...
- Python程序的执行原理(转载)
Python程序的执行原理 2013-09-17 10:35 佚名 tech.uc 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令 ...
随机推荐
- oracle 分组后取每组第一条数据
‘数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test ...
- go语法之一
Go语法: Go语言要求public的变量必须以 大写字母开头,private变量则以小写字母开头,这种做法不仅免除了public.private关键字,更重要的是统一了命名风格. Go语言对{ } ...
- Knockout快速扫盲
1.Knockout.js是什么? Knockout是一款很优秀的js库,它可以快速让你使用一个干净整洁的底层数据模型,即可创建一个富文本且具有良好显示和编辑功能的用户界面.任何时候你的ui需要自 ...
- Thread interrupt方法解析
初步理解 我们在看一些多线程代码的时候,有的时候会碰到使用interrupt()方法的时候.从字面的意思来理解,应该就是中断当前正在执行的线程.那么,对于一个我们设计的普通线程来说,如果我们在主线程里 ...
- Two Sum-n方优化与C++map的使用
LeetCode第一题,刚拿到题目时虽然明知道n方的遍历算法会超时,但还是不信邪的提交了一次,然而编程不存在运气,TLE不可避免.但是之后的思维方式比较直接,我并没有立刻想到O(n)的方法,想了一种先 ...
- Hadoop运行中遇到的错误调试
在运行Hadoop的过程中遇到的最多的问题就是DataNode不能正常的启动,各种问题都有可能,说一下我遇到的两种情况: (1)第一种情况是Master的防火墙没有关闭.这样在启动Hadoop的时候, ...
- setInterval(code, time)中code传递参数办法
1.使用setInterval的场景 有时我们需要隔一定的时间执行一个方法,这时就会用到setInterval,但是由于这个方法是浏览器模拟出的Timer线程,在调用我们方法时不能为其传递参数. 2. ...
- awk参数详解
wk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F| ...
- HLS 协议
HTML 5 视频直播一站式扫盲 本文来自于腾讯bugly开发者社区,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1 ...
- Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer'
@Configuration public class HttpSessionConfig { @Bean public static ConfigureRedisAction configureRe ...