У нас есть двоичный файл C++, который будет отслеживать некоторые каталоги, и если в эти каталоги добавляется какой-либо новый файл, двоичный файл C++ анализирует файл, создает новый файл и помещает его в какой-либо другой каталог.
Нам нужно протестировать обработанный файл. Мы использовали Python, чтобы проверить это. Наш тестовый пример Python делает ниже
Ниже приведен псевдокод, который я использовал.
file = 'SomeFile.txt'
prc = subprocess.Popen([cpppath, "-v", "-c", cfg], stdout=file)
# Add some files in to a directory
time.sleep(5) # To give time to C++ binary
# Test the content
Но проблема, которую я заметил, заключается в том, что time.sleep() также останавливает двоичный код C++. Я узнал об этом, потому что у нас есть поток cron в двоичном коде C++, который будет печатать I am Alive каждую секунду. Это печатается до тех пор, пока мы не вызовем timer.sleep() в python. Как только сон закончился, тест Python начал тестировать контент. Но так как двоичный файл C++ не смог обработать файл в контрольном каталоге, тест не пройден.
Мой менеджер предложил использовать сигналы. Тестовый пример Python создаст файлы в каталоге наблюдения и будет ждать sigusr1, и как только придет сигнал, тест продолжится. Двоичный код C++ обрабатывает входные файлы, помещает обработанный файл в каталог и сигнализирует родительскому процессу, который является тестом Python. Но даже для этого тест python должен использовать sleep() или pause(), что снова будет той же проблемой.
Может кто-нибудь, пожалуйста, дайте мне знать, есть ли способ решить проблему.
Один процесс не должен зависеть от другого спящего процесса. Многопроцессорные системы были бы практически неработоспособны, если бы они были настолько переплетены.
Боковое примечание: если вы можете заменить этот сон каким-то видом передачи сообщений, и это может быть то, к чему ваш менеджер шел с сигнализацией, поэтому вы не тратите время на сон или рискуете недоспать код С++ занимает дольше, чем предполагалось.
Возможно, на то, как отображается вывод «Я жив», влияет sleep.
Это стоит выделить и изучить. Посмотрите, сможете ли вы воспроизвести это поведение на минимально воспроизводимом примере.






Нет, вызов time.sleep() в Python не влияет на двоичный файл, запущенный с помощью subprocess.Popen(). Должна быть какая-то другая причина, по которой тест не работает должным образом.
он не должен блокировать двоичный файл С++... если он (на самом деле не должен) использовать многопроцессорность вместо этого