#python #scripting #multiprocessing
#python #сценарии #многопроцессорная обработка
Вопрос:
У меня есть скрипт на Python, который должен запускать большое количество других скриптов, каждый из которых расположен в подкаталоге рабочего каталога скрипта. Предполагается, что каждый из этих других сценариев подключается к игровому клиенту и запускает ИИ для этой игры. Чтобы выполнить этот запуск, мне пришлось запускать каждый скрипт в двух отдельных потоках (по одному для каждого игрока). Проблема, с которой я сталкиваюсь, заключается в том, что иногда выходные данные скриптов не фиксируются. Мой код выполнения выглядит следующим образом:
def run(command, name, count):
chdir(name)
output = check_output(" ".join(command), stderr = STDOUT, shell = True).split('r')
chdir('..')
with open("results_" str(count) ".txt", "w") as f:
for line in output:
f.write(line)
Странная часть заключается в том, что ему удается захватывать более длинные потоки, но короткие остаются незамеченными. Как я могу изменить свой код, чтобы исправить эту проблему?
ОБНОВЛЕНИЕ: я не думаю, что это проблема с буферизацией, потому check_output("ls ..", shell = True).split('n')[:-1]
что возвращает ожидаемый результат, и эта команда должна занимать гораздо меньше времени, чем сценарии, которые я пытаюсь запустить.
ОБНОВЛЕНИЕ 2: я обнаружил, что выходные данные сокращаются для более длительных запусков. Оказывается, что конец вывода по какой-то причине пропускается для всех процессов, которые я запускаю. Это также объясняет, почему более короткие прогоны вообще не дают никаких выходных данных.