Що буде, якщо я змінити сценарій Python під час його запуску?


219

Уявіть собі сценарій пітона, який запустить тривалий час, що буде, якщо я його модифікую під час роботи? Чи буде результат різним?


8
Програма завантажується у вашу основну пам'ять. Якщо змінити вихідний файл, нічого не станеться. Уявіть, що процесор прочитав би інструкції з жорсткого диска ...
Фелікс Клінг

15
@Felix: Це називається "Виконати на місці" (XIP).
Ігнасіо Васкес-Абрамс

@Ignacio: Цікаво, я цього не знав. Дякую :)
Фелікс Клінг

3
Ви можете динамічно перезавантажити код модулів см stackoverflow.com/questions/437589 / ...
Iliyan Bobev

2
Зверніть увагу , що пакетні файли Windows , дійсно виконувати на місці, так що це не гіпотетичне питання, є мови, які там поводяться таким чином.
yoyo

Відповіді:


259

Нічого, тому що Python попередньо компілює ваш сценарій у файл PYC і запускає його.

Однак, якщо трапляється якесь виняток, ви можете отримати дещо оманливе пояснення, оскільки рядок X може мати інший код, ніж до запуску сценарію.


10
Не обов’язково у файл.
Ігнасіо Васкес-Абрамс

60
Але що робити, якщо ви повторно запускаєтесь під час запуску, коли нові файли pyc перезаписують старі, це спричинить проблеми в програмі, яка вже працювала чи ні?
уповільненийкавіар

26
Нічого не відбувається. Я також перевірив це в невеликому тесті. Що відбувається: pyc - це лише компіляція. І ця компіляція завантажується в оперативну пам'ять і потім виконується. Тому завжди можна змінити програму, перекомпілювати та запустити інший екземпляр, наприклад, в іншій консолі.
Кріс

7
@Chris Я запустив екземпляр мого сценарію python в одній консолі. Поки це працювало, я змінив два рядки коду і запустив інший екземпляр в окрему консоль. Через деякий час з першої консолі повернулася помилка про два рядки коду, які я змінив після запуску! pls help
double_j

14
@Chris Я думаю, я знаю, що тут відбувається. Якщо ви змінили скрипт і збережете його під час запуску та попередні помилки версії, під час зчитування прослідковується, це відкриває поточну версію файлу і робить відстеження виглядати інакше, ніж при запуску. Я сам це бачив уже кілька разів.
double_j
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.