Я пытался запустить два подпроцесса одновременно на одной машине, чтобы получить точное время выполнения.Я сравниваю две версии программного обеспечения и выполняю на них диагностику, такую как время выполнения, изменение вывода и т. Д.
Первоначально у меня была одна функция, которая использует обе версии программного обеспечения в одном входном файле, и каждая выводитдругое место.Старая и новая версии перехвачены через argparser.Функция использует подпроцесс для каждой программной команды, а затем вывод передается через .communicate ().Но я знаю, что .communicate () ожидает завершения процесса, в идеале я хочу использовать .communicate () для обоих процессов одновременно, чтобы они запускались в одно и то же время и давали мне результаты всякий раз, когдапока я знаю их время выполнения.
Мой вопрос, более кратко, состоит в том, как я могу запустить два подпроцесса, каждый из которых работает по отдельности и запускается одновременно.А затем возьмите их среды выполнения и stdout, stderr?
Вот краткий пример моей функции (просто представьте, что я тестирую скорости java для какого-то файла):
def test():
# Get start time
before = time.time()
cmd1 = ['java-1.0', 'blah']
c1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
cmd2 = ['java-1.5', 'blah']
c2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Start both processes at the same time??
results = [c1.communicate(), c2.communicate()]
# Get total time taken
total = round(time.time()-before, 2)
# Print out the total time (I know its messy but its accurate)
print "%s:%s:%s" % (int(total/60/60), int(total/60), int(total))
c1.stderr.close()
c2.stderr.close()
return results
Еще один момент, который я хочуЯ хочу, чтобы они выполнялись одновременно, потому что, если я запускаю задание на мощной удаленной машине (которой я буду), тогда мне нужно, чтобы рабочая нагрузка была одинаковой при выполнении заданий, чтобы один процесс не выполнялся.заканчивайте быстрее только потому, что он бежал в другое время.