python 多进程_简单实现python多进程

在处理特别大的数据的时候,尤其是多重循环。例如对2万个基因进行一个计算,每个基因的计算需要进行1亿次比较。仅仅使用一个主进程进行计算就显得十分吃力;于是学习了python多进程的的处理,极大的缩短了脚本的运行时间。

6197dec51ca131acce57518e84e86dad.png

  • 首先根据进程数,来分配任务

  • 将所有的进程加入进程池

  • 启动多个进程任务时,阻塞当前主进程

  • 待多进程任务完成后,在主进程中将结果输出

分配任务

  • ProcessNum从命令行中获取进程数

  • 根据进程数,平均分配任务给每个进程;最后一个进程负责除不尽的任务

  • p.apply_async给每个进程指定调用的函数和参数

  • p.close()所有进程任务指定完毕,开始执行进程任务

  • p.join()阻塞主进程,等待子进程任务完成

import multiprocessingwith open(args.AS, 'r') as File:    data = File.readlines()    ProcessNum = int(args.p)    average = int(len(data)/ProcessNum)    p = multiprocessing.Pool(16)    for processId in range(0, ProcessNum):        if processId == ProcessNum-1:            start = processId*average            end = len(data)        else:            start = processId*average            end = (processId+1)*average        out.append(p.apply_async(mulProcessPSI,                                 (data[start:end], processId+1)))    p.close()    p.join()

获取进程结果

  • out数组中存着每个进程计算的结果

  • get()对每个进程调用get方法获得结果

with open(args.o, 'w') as File:    for result in out:        for item in result.get():            File.write(item)

03b74ab58191224996c44b302c94e2f6.png

仍需学习的

  • 多个进程进行文件写入时,涉及谁先写,谁后写的问题;需要使用到文件锁

  • 进程间通信问题

  • 内存溢出问题,多个进程的结果合并后太大了

参考

  1. https://zhuanlan.zhihu.com/p/64702600

  2. https://www.cnblogs.com/jiangfan95/p/11439207.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值