Почему функция, определенная в main, работает, но не перемещается в модуль? - PullRequest
0 голосов
/ 19 марта 2020

Я довольно новичок в python и особенно в многопоточности, поэтому я могу упустить что-то очевидное.

По сути, я пытаюсь запустить несколько симуляций на удаленном компьютере, используя разные начальные условия. Это идеальный вариант использования для многопоточности, поскольку моему сценарию нужно только дать команду запуска симуляции удаленному хосту и дождаться окончания симуляции sh.

Мой скрипт запущен и работает, но когда я пытаюсь переместить мою функцию запуска с основного на модуль, я получаю другое поведение. Затем потоки больше не ждут окончания симуляции sh, а вместо этого начинают все оставшиеся симуляции вскоре один за другим.

Я использую paramiko для установления sh соединения с удаленным компьютером (не показано в коде ), а также для передачи команды запуска. Насколько я понимаю, строка stdout.channel.recv_exit_status () должна позволить сценарию дождаться ответа удаленного компьютера и, следовательно, остановить сценарий до получения этого ответа.

Я не понимаю, почему скрипт работает, когда функция определена в main, а не когда она определена в модуле. Кто-нибудь, пожалуйста, уточните?

Это функция, которую я использую. Пока я пропустил части, где установлено соединение и создан список заданий. Скажите, пожалуйста, нужны ли эти детали? Спасибо

def start_simulation(job):
    path_to_kernel = PurePosixPath('/usr/foo/bar/kernel')
    destination = PurePosixPath(job).parents[0]
    myinput='nohup {} {} {}/ &>/dev/null'.format(str(path_to_kernel),
        str(job),str(destination))
    stdin, stdout, stderr = client.exec_command(myinput)
    exit_status = stdout.channel.recv_exit_status()
    print(exit_status)

with concurrent.futures.ThreadPoolExecutor(max_workers=6) as executor:
    executor.map(start_simulation, jobs)
...