同时读取大文件

时间:2019-01-22 21:43:22

标签: python file concurrency

我正在创建一个python管道来处理非常大的二进制文件(即50+ GB)。它们是BAM文件,一种用于表示基因组的格式。目前,我的脚本受到两个计算量非常大的子流程调用的瓶颈。

这两个命令占用管道每次运行的大约80%的计算时间,因此我需要找出一种加快此过程的方法。他们从同一文件读取数据。我想知道提高效率的最佳途径。基本上,是否有某种特定的并发方式最有效?还是有其他有趣的方式做到这一点?

谢谢!

命令:

subprocess.call('samtools视图-b -f 68 {}> {} _ unmapped_one.bam'.format(self.file_path,self.file_prefix),shell = True)

subprocess.call('samtools视图-b -f 132 {}> {} _unmapped_two.bam'.format(self.file_path,self.file_prefix),shell = True)

1 个答案:

答案 0 :(得分:0)

对于您所描述的内容以及共享的代码,我可以想到几种提高性能的方法。

  1. 您正在程序外壳内生成子进程来处理文件,这种方法会根据程序所运行的硬件而有所不同,如果是在多处理器环境中,那可能是一个好方法。
  2. 考虑使用pysam库,该库包装了低级的hstlib API
  3. 取决于您开发的应用程序流程-通过扩展使用asyncio的并发活动,您可能能够显着提高性能。布拉德·萨洛蒙(Brad Salomon)最近的article简短地解释了多处理和多线程的好处以及对异步的深入了解。
  4. 如果最终还是在基于UNIX的系统上使用了asyncio,我还建议查看uvloop,它将libuv封装为事件循环