Linux下实现 psi-blast 的多进程并批量生成 pssm 文件

0. 说明:

在 Linux 通过 Python 的多进程模块实现 psi-blast 的并行,批量生成 pssm 文件。

1. 代码:

import subprocess
import multiprocessing
import time
import os

def runPsiBlast(args):
    queryFile, dbFile, outFile = args[0], args[1], args[2]
    cmd = f"./psiblast -query {queryFile} -db {dbFile} -out_ascii_pssm {outFile} -num_iterations 3 -evalue 0.001"
    subprocess.run(cmd, shell=True)


def main(queryPath, outPath, dbFile, cpu):
    """
        queryPath: query fasta文件所在的绝对路径;
        outPath: 生成的 pssm 文件所在的绝对路径;
        dbFile: 库文件(需要绝对路径);
        cpu: 并行所需的 cpu 数目;
    """
    queryFileList = [x.split(".")[0] for x in os.listdir(queryPath) if x.endswith(".fasta")] ## 全部的目标fasta文件
    alreadyFileList = [x.split(".")[0] for x in os.listdir(outPath) if x.endswith(".pssm")] ## 输出目录中已经存在的pssm结果文件(主要是如果程序中止,后续可以接着将没有pssm结果的fasta继续进行psiblast比对,不需要全部重新运行)
    needFileList = list(set(queryFileList) - set(alreadyFileList))
    print("全部的fasta文件的总数: %s\t已经有pssm结果的文件数目: %s\t还需要生成pssm的fasta文件的数目: %s" % (len(queryFileList), len(alreadyFileList), len(needFileList))) ## 全部的,已完成的,未完成的
    
    needFileList.sort()
    queryFastaList = [queryPath+x+".fasta" for x in needFileList]
    outPSSMList = [outPath+x+".pssm" for x in needFileList]
    dbFileList = [dbFile,]*len(queryFastaList)
    
    ## 多进程
    pool = multiprocessing.Pool(processes=int(cpu))
    pool.map(runPsiBlast, list(zip(queryFastaList, dbFileList, outPSSMList)))
    pool.close()
    pool.join()


if __name__ == "__main__":
    print("开始时间: ",time.ctime())
    
    queryPath = "/home/zzy/QueryFastaFiles/" ## fasta 文件所在目录
    outPath = "/home/zzy/ResPSSMFiles/" ## 输出的 pssm 文件所在目录
    dbFile = "/home/zzy/Uniref90/uniref90.fasta" ## 库文件所在目录
    
    main(queryPath=queryPath,
         outPath=outPath,
         dbFile=dbFile,
         cpu=4) ## 默认4个cpu
    
    print("结束时间: ",time.ctime())

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值