我需要将一个非常大的.bam文件转换为.bed文件,虽然我通过使用bedops的bam2bed并行,并行支持SEG和gnuParallel找到了解决方案,我可以访问的两个集群仅支持slurm和扭矩调度程序,以及我不太了解tcsh,我甚至无法修改脚本以满足slurm和扭矩的要求。
由于我对Python有一点了解,我计划使用Python的多处理模块来执行此操作,但是,以下代码引发了一个奇怪的消息:
“Python在使用calignmentfile.so插件时意外退出”
# The code here is just a test code, ignore its real meaning.
import multiprocessing as mp
import pysam
def work(read):
return read.query
# return read.split()[0]
if __name__ == '__main__':
cpu = mp.cpu_count()
pool = mp.Pool(cpu)
sam = pysam.AlignmentFile('foo.bam', 'rb')
read = sam.fetch(until_eof=True)
# f = open('foo.text', 'rb')
# results = pool.map(work, f, cpu)
results = pool.map(work, read, cpu)
print(results)
此消息是否意味着来自pysam.AlignmentFile()的读取不支持并行性,或者Python不支持这种并行?我使用常规文本文件测试这段代码,它运行良好(例如代码被注释)。
答案 0 :(得分:0)
pysam
确实存在一些并发问题。如果您看到source code for fetch
,您会看到problem with concurrency and iterating它的返回类型