自己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文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令 ...
随机推荐
- 无法编辑的word解密
打开文档后,将其另存为XML文件,然后用UltraEdit(或者EditPlus,下载华军里搜索一下就行了)这个编辑软件打开刚刚存储的 XLM文件,查找<w:documentProtection ...
- 如何通过java反射将数据库表生成实体类?
首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有 ...
- SQLSERVER 跨服务器查询
SELECT * FROM OPENDATASOURCE( 'SQLOLEDB', 'Data Source=IP;User ID=UserId;Password=Pa ...
- 第2章 Python基础语法 -- 数据类型
2.2数据类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 2.2.1 标准数据类型 在内存中存储 ...
- jqGrid一些操作
formatter:function(cellvalue,options,rowObject){} 在格式化行的时候这三个参数 cellvalue行数, options配置信息, rowObject行 ...
- Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述
原文 Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述 第9部分:Windows Phone 8模拟器概述 原文地址: http://channel9.ms ...
- Linux 中将用户添加到组的指令
在 Linux 操作系统下,如何添加一个新用户到一个特定的组中?如何同时将用户添加到多个组中?又如何将一个已存在的用户移动到某个组或者给他增加一个组?对于不常用 Linux 的人来讲,记忆 Linux ...
- 最短路Dijkstra和Flyod
Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要 ...
- c++,static 静态成员变量 / 静态成员函数
静态成员变量: //静态成员变量(static) // //1.如果想在同类的多个对象之间实现数据共享 ,可以用静态 //成员变量,即用static修饰的成员变量,例 static int a; // ...
- ubuntu卸载vmware
下面方法摘抄网上方法,经过证实好使 lsmod——显示已载入系统的模块 ps aux : 显示其他用户启动的进程(a) 查看系统中属于自己的进程(x) 启动这个进程的用户和它启动的 ...