生信5--python多线程multiprocessing模块

if __name__ == '__main__':
    args = myParser()
    input_fasta_file = judge_input_reference_SNP(args.reference)
    input_fastq_file = judge_input_fastq_SNP(args.input)
    build_SNP_lastdb_if_needed() #SNP_reference建立必要的索引用于last比对
    build_picard_dict_if_needed()
    
    if len(input_fastq_file) == 0:
        print("No data")
    if len(input_fastq_file) == 1:
        input_fastq_file_one = input_fastq_file[0]
        SNP_result = run_SNP_module(input_fastq_file_one)
        
    if len(input_fastq_file) > 1:
        merge_result_list = [merge_result_SNP(i) for i in input_fastq_file]
        '''
        多线程
        '''
        p_l = []
        for i in range(len(input_fastq_file)):
            p=Process(target=run_SNP_module,kwargs={'input_fastq_file':input_fastq_file[i]})
            p_l.append(p)
            p.start()
            
        for p in p_l:
            p.join()
            
        rm_file()
        
        '''
        整理结果
        '''
        new_list = []
        for i in merge_result_list:
            dataframe = pd.read_excel(i, index_col = 0)
            new_list.append(dataframe)
            
        df = pd.concat(new_list, axis=1) #多个DataFrame合并为一个
        df.to_excel(args.output, sheet_name = 'SNP_result', index = True) #写入到一个新excel表中
        
        '''
        美化excel结果
        '''
        beautiful_excel_SNP(args.output)

用multiprocessing模块来多线程
from multiprocessing import Process

先用列表建立一堆Process对象
run_SNP_module是我建立的一个函数方法,这是一个我期望并行的流程
p=Process(target=run_SNP_module,kwargs={'input_fastq_file':input_fastq_file[i]})

用p.start()来启动任务运行

for p in p_l:
           p.join()

这段代码是为了能够等待子程序完成再进入主程序

一个简单的内部并行就完成了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容