利用codon神器10倍提升我的python代码效率

下面是我的过滤单细胞reads数据的python脚本
# coding = utf-8
import sys, os
import gzip
import random

fq1_file = sys.argv[1]
fq2_file = sys.argv[2]
fq1_newfile = sys.argv[3]
fq2_newfile = sys.argv[4]
data_num = int(sys.argv[5]) # 按 G 算

f1 = gzip.open(fq1_file, "r")
f2 = gzip.open(fq2_file, "r")
f1new = gzip.open(fq1_newfile, "wb")
f2new = gzip.open(fq2_newfile, "wb")

n=0
rd = data_num * 13333332 + 4 * random.choice(range(10,1000)) # 保留多少倍1G数据
while True:
    try:
        hed_1 = next(f1)
    except StopIteration:
        break
    hed_2 = next(f2)
    seq_1 = next(f1)
    seq_2 = next(f2)
    plus_1 = next(f1)
    plus_2 = next(f2)
    baseQ_1 = next(f1)
    baseQ_2 = next(f2)
    # print(seq_1)
    # print(seq_1[0:3])
    seq_T = seq_1[30:60] # 注意此处codon编译后会自动转化为str,故不需要 decode()
    if seq_T.count("T") > 20:
        f1new.write(hed_1)
        f1new.write(seq_1)
        f1new.write(plus_1)
        f1new.write(baseQ_1)
        f2new.write(hed_2)
        f2new.write(seq_2)
        f2new.write(plus_2)
        f2new.write(baseQ_2)
        n += 4
        if n > rd:
            break

f1.close()
f2.close()
f1new.close()
f2new.close()

首先我们来看原生python脚本运行时间:
在这里插入图片描述

接下来试试codon神器转换后的程序效率

codon下载:

# github地址:https://github.com/exaloop/codon
/bin/bash -c "$(curl -fsSL https://exaloop.io/install.sh)"

第一步:利用codon编译器将我的python脚本编译为可执行文件

/home/huguang/software/codon-deploy/bin/codon build -release -exe filt_sc_fq.codon.py
# 该命令会生成一个filt_sc_fq.codon的二进制可执行文件

我用的centos7.9,如果报gcc编译器版本低,某些参数不支持,可通过执行

# 安装gcc基础依赖包,使用如下命令 $ yum -y install gcc-c++
# 再次,为了编译最新版本的Redis源码还需要使用devtoolset升级gcc版本:
$ yum -y install centos-release-scl
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
$ scl enable devtoolset-9 bash #或者 source /opt/rh/devtoolset-9/enable
$ echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
# 安装devtoolset后,需要输入scl enable devtoolset-9 bash来启动devtoolset后针对本次会话有效,若重新登录Linux,需要再次使用scl命令激活devtoolset。
# 若要使devtoolset长期有效,需要输入 echo"source/opt/rh/devtoolset-9/enable">>/etc/profile
# 该操作需要root权限,普通用户需root操作完后切换普通用户使用即可。

通过以上操作即可切换GCC至9.3.1版本。

第二步:直接执行该命令

time filt_sc_fq.codon E100069107_L01_C57_BM_G_M_DNA_0109_01_R1.fq.gz E100069107_L01_C57_BM_G_M_DNA_0109_01_R2.fq.gz tmp_R1.fq.gz tmp_R2.fq.gz

在这里插入图片描述
可以看到运行时间为13.530s,相较原生python脚本运行时间2m37.856s,效率提高了10倍以上。

你可能感兴趣的:(python,生物信息,python,开发语言)