Запуск скрипта на python и изменение ветки git

1

Я пытаюсь найти способы лучше использовать свое время во время программирования.

У меня есть сценарий python, который выполняет некоторую тяжелую работу (это может занять несколько часов), чтобы закончить. Теперь большая часть работы, которую он выполняет, связана с сетью, поэтому у меня много ресурсов процессора.

Если скрипт был исполняемым двоичным кодом C, было бы неплохо git checkout на другую ветку и выполнять дополнительную работу, я даже мог бы модифицировать двоичный диск на диске, поскольку он был скопирован в ram, поэтому пока он не завершит работу, я не буду влияют на выход программы.

Но скрипты python переводятся, а не компилируются. Что произойдет, если я начну фальсифицировать исходный файл, могу ли я повредить выходные данные программ или текстовый файл и связанные им копии, скопированные в ОЗУ, позволяя мне вмешаться в исходный код, не рискуя изменить поведение запущенной программы?

Теги:
git-branch
branch

3 ответа

1

Когда запускается программа python, она compiled (вроде как, более как переведенный) в.pyc файл, который затем запускается интерпретатором python. Когда вы меняете файл, он не должен влиять на код, если он уже запущен.

Ниже приведен соответствующий ответ stackoverflow. Что произойдет, если я изменю скрипт Python во время его запуска?

  • 0
    Вся компиляция является формой перевода, если только вы не думаете, что компиляция обязательно означает «создает машинный код для оборудования, на котором я работаю».
  • 0
    Да уж. Я склоняюсь к тому, чтобы называть это компиляцией, но у меня есть люди, которые утверждают, что компиляция должна использоваться только тогда, когда речь идет о компиляции с машинным кодом, а не с байтовым кодом, используемым в интерпретаторе. Я не уверен, какой из них правильный, поэтому я квалифицирую свое утверждение, ха-ха.
1

Почему бы не создать другой рабочий каталог, в котором вы внесете изменения? Есть ли много вспомогательных данных или что-то, что затрудняет настройку рабочего каталога? Т.е. если ваш рабочий каталог A, git clone AB, а затем работайте в B Когда вы закончите, вы можете вернуть изменения от B до A:

git remote add B ../B
git pull B master
  • 0
    Структура каталогов гигантская, и код опирается на эту конкретную структуру директории, поэтому я должен был бы скопировать зетабайты памяти, чтобы иметь другой каталог
  • 0
    Это все еще возможно, хотя это не так просто, как если бы код и данные были отдельными. Предположим, вы использовали символические ссылки. То есть, если у вас есть каталог A/data , то в каталоге B введите ln -s /path/to/A/data . Это предполагает, что ваша ОС достаточно юникси, чтобы иметь символические ссылки.
Показать ещё 1 комментарий
1

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

Однако мы можем умышленно сломать его, написав какой-то ужасный, но юридический код:

horrible.py:

from time import sleep


sleep(10)
import silly
silly.thing()

silly.py:

def thing():
    print("Wow!")

Вы можете запустить horrible.py и пока он работает, вы можете редактировать silly.py на диске, чтобы сделать что-то еще. Когда silly.py окончательно import, обновленная версия будет загружена.

Обходной путь состоит в том, чтобы поместить весь ваш импорт в верхнюю часть файла, который, вероятно, вы все равно сделаете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню