Ранее я задавал аналогичный вопрос, но не получил полезного ответа, поэтому я постараюсь сделать все более ясным.Многопроцессорная и многопоточная обработка
Что я ищу, это запустить многопоточный или предпочтительно многопроцессорный подход к определенной команде 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', 'time', 'java', '-Xmx6G', '-jar', '/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', 'TMP_DIR=/comparison', 'VALIDATION_STRINGENCY=LENIENT', '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 объект не итерацию" ошибка. Кто-нибудь имеет лучшую идею, чем то, что у меня есть сейчас? Я не хочу уходить совсем в другом направлении, чтобы ударить по другой стене. В итоге я хочу запустить c1 на одном процессоре и c2 на другом одновременно, пожалуйста, помогите!
Почему вы хотите запускать их одновременно? Я сомневаюсь, что вы получите значимые результаты. –
Рассматривали ли вы их последовательно, так что вы действительно можете имитировать сам процесс? ЦП не является единственным общим ресурсом, поэтому, если это интенсивная или интенсивная работа с памятью, у вас может быть один процесс или поток, который выигрывает и имеет вид более быстрого. – Jordan