您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 多处理和多线程

5b51 2022/1/14 8:21:13 python 字数 3673 阅读 503 来源 www.jb51.cc/python

之前我问了一个类似的问题,但没有得到有用的答复,所以我会努力让事情变得更清楚.我正在寻找的是对某个linux命令运行多线程或最好是多处理方法.如果有人熟悉Picard,我想在bam文件上运行早期版本,同时在同一个bam文件上运行更新版本.我们的想法是测试新版本的速度有多快,以及它是否给出了相同的结果.我的主要问题是我不知道如何在Popen命令上实现多处理.例

概述

之前我问了一个类似的问题,但没有得到有用的答复,所以我会努力让事情变得更清楚.

我正在寻找的是对某个linux命令运行多线程或最好是多处理方法.如果有人熟悉Picard,我想在bam文件上运行早期版本,同时在同一个bam文件上运行更新版本.我们的想法是测试新版本的速度有多快,以及它是否给出了相同的结果.

我的主要问题是我不知道如何在Popen命令上实现多处理.例如.

cmd1 = ['nice','time','java','-Xmx6G','-jar','/comparison/old_picard/MarkDuplicates.jar','I=/comparison/old.bam','O=/comparison/old_picard/markdups/old.dupsFlagged.bam','M=/comparison/old_picard/markdups/old.metrics.txt','TMP_DIR=/comparison','VALIDATION_STRINGENCY=LENIENT','ASSUME_SORTED=true']
cmd2 = ['nice','/comparison/new_picard/MarkDuplicates.jar','I=/comparison/new.bam','O=/comparison/new_picard/markdups/new.dupsFlagged.bam','M=/comparison/new_picard/markdups/new.metrics.txt','ASSUME_SORTED=true']

c1 = subprocess.Popen(cmd1,stdout=subprocess.PIPE)
c2 = subprocess.Popen(cmd2,stdout=subprocess.PIPE)

然后我有一个计时器功能

def timeit(c):
    past = time.time()
    results = [c.communicate()]
    present = time.time()
    total = present - past
    results.append(total)
    return results

我想要做的是:

p = Process(target=timeit,args=(c1,c2))
p.start()
p.join()

但是我得到“Popen object is iterable”错误.有没有人比我现在拥有更好的主意?我不想在一个完全不同的方向走,只能撞到另一面墙.总之我想在一个cpu上运行c1而在另一个c2上同时运行c2,请帮忙!

import time
import subprocess
from multiprocessing import Process

cmd1 = ['nice','ASSUME_SORTED=true']

def timeit(cmd):
    print cmd
    past = time.time()
    p = subprocess.Popen(cmd,stdout=subprocess.PIPE)
    results = [p.communicate()]
    present = time.time()
    total = present - past
    results.append(total)
    return results

p1 = Process(target=timeit,args=(cmd1,))
p2 = Process(target=timeit,args=(cmd2,))

for p in (p1,p2):
    p.start()
for p in (p1,p2):
    p.join()

ETA:虽然上述解决方案通常是进行多处理的方法,但@ Jordan完全正确,你不应该使用这种方法计算两个版本的软件.为什么不顺序运行它们?

总结

以上是编程之家为你收集整理的python – 多处理和多线程全部内容,希望文章能够帮你解决python – 多处理和多线程所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶