用python map函数实现pharmdock并行运算

最近在服务器上应用Pharmdock软件进行运算时,只能利用一个cpu,考虑到cpu浪费太多,于是考虑到了多线程


import os
from multiprocessing import Pool

#遍历文件夹,返回分子路径
def get_mol_paths(folder):
    return (os.path.join(folder,f) for f in os.listdir(folder) if f.endswith('_omega2.mol2'))
'''
#遍历分子列表,返回分子路径
def get_mol_paths(molslist):
    f= open(molslist)
    g=[]
    for m in f.readlines():
        m=m.strip('\n') #去掉每行结尾处的换行符
        g.append(m)
    return g 
'''

def run_cmd(filename):
    dock='/usr/local/cloud/PharmDock/bin/docking \
                -c /usr/local/cloud/PharmDock/dat/CamDoc.bcf \
                -l %s \
                -p /map/substr/test/ProtPharm/Docking_Pharmacophore.mol2 \
                -ps /map/substr/test/ProtPharm/Scoring_Pharmacophore.mol2 \
                -prot /map/substr/test/pro.pdb \
                -nmode 1 -o out -limoc' % filename
    os.system(dock)

if __name__=='__main__':
    folder="/map/free/free_ph"
    mols = get_mol_paths(folder)
    pool = Pool()
    pool.map(run_cmd,mols)
    pool.close()
    pool.join()


map函数读取mols列表中的文件作为参数分别传入run_cmd进行运算,并行处理后16个cpu可以全部利用,速度大大提升


关于map函数的解析和应用可参照:

http://my.oschina.net/zyzzy/blog/115096

http://www.jb51.net/article/63368.htm


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值