Запустите один и тот же код Python в двух терминалах, будут ли они мешать друг другу?

У меня есть скрипт python, выполнение которого занимает некоторое время в зависимости от переданного аргумента. Итак, если я запускаю их с двух терминалов с разными аргументами, они получают свою версию кода? Я не вижу двух генерируемых файлов .pyc.

Терминал 1 работает: python prog.py 1000 > out_1000.out

Прежде чем скрипт, работающий на терминале 1, завершится, я запускаю другой; таким образом, терминал 2 работает: python prog.py 100 > out_100.out

Или в основном мой вопрос, могут ли они мешать друг другу?


person samsamara    schedule 29.04.2016    source источник
comment
Что вы имеете в виду под «переписать друг друга»?   -  person    schedule 29.04.2016
comment
a.out будет перезаписан последним запуском, используйте >> вместо >, python prog.py будет нормально работать на обоих терминалах   -  person riteshtch    schedule 29.04.2016
comment
a.out? Я не вижу здесь C.   -  person    schedule 29.04.2016
comment
Файл .pyc создается при импорте файла. Но, как правило, можно снова запустить тот же скрипт Python, пока он уже запущен. Для каждого сценария создается собственный процесс Python, в котором выполняется сценарий.   -  person salomonderossi    schedule 29.04.2016


Ответы (3)


Если вы записываете вывод в тот же файл на диске, то да, он будет перезаписан. Однако кажется, что вы на самом деле печатаете на стандартный вывод, а затем перенаправляете его в файл. Так что это не тот случай здесь.

Теперь ответ на ваш вопрос прост: нет взаимодействия между двумя разными исполнениями одного и того же кода. При выполнении программы или скрипта ОС загружает код в память и выполняет его, а последующие изменения кода не имеют ничего общего с кодом, который уже запущен. Технически запущенная программа называется процессом. Кроме того, когда вы запускаете код на двух разных терминалах, в ОС будет два разных процесса, по одному для каждого из них, и два процесса не смогут вмешиваться, если вы явно не сделаете это (IPC или межпроцессное взаимодействие), что вы делаешь здесь.

Таким образом, вы можете запускать свой код одновременно на разных терминалах, они будут полностью независимы.

person Ali    schedule 29.04.2016
comment
+1 понравилось, как вы ответили на вопрос об основных операционных системах, концепциях управления памятью / процессами. Спасибо! - person samsamara; 29.04.2016
comment
Хорошее и понятное объяснение! - person sai; 20.11.2020

Каждый процесс интерпретатора Python является независимым. То, как скрипт реагирует на многократное выполнение, зависит от конкретного используемого кода, но в целом они не должны мешать.

person Ignacio Vazquez-Abrams    schedule 29.04.2016

  1. Ссылка на файл .pyc http://effbot.org/pyfaq/how-do-i-create-a-pyc-file.htm

Python автоматически компилирует ваш скрипт в скомпилированный код, так называемый байт-код, перед его запуском. Когда модуль импортируется в первый раз или когда исходный код более поздний, чем текущий скомпилированный файл, файл .pyc, содержащий скомпилированный код, обычно создается в том же каталоге, что и файл .py.

  1. Если вы боитесь, что ваш код будет перезаписан из-за какой-либо ошибки, вам следует научиться помещать свой код под КОНТРОЛЬ ВЕРСИЙ. Зарегистрируйте github и используйте git для этого.

  2. больший знак ">" отправит вывод в правильный обработчик. Если вы укажете имя файла, он выведет вывод на это имя файла. Даже в другом терминале, если вы запускаете код в одной и той же папке, используйте точку «>» для ТОГО ЖЕ имени файла, файл справа от «>» определенно будет перезаписан.

  3. ИСХОДНЫЙ КОД ПРОГРАММЫ НЕ ИЗМЕНЯЕТСЯ во время выполнения. Если только вы не приобретете навыки взлома программ высокого уровня.

  4. Каждая программа будет работать в своей «рабочей области выполнения». Если вы не создадите код, который использует те же ресурсы (например, изменение одного и того же файла, общие ресурсы), в противном случае помех не будет. (за исключением того, что если один исчерпает все ресурсы процессора, памяти, второй будет мешать, но это уже другая история)

person mootmoot    schedule 29.04.2016