Найти - Пользователи
Полная версия: Отключить кеширование кода
Начало » Python для экспертов » Отключить кеширование кода
1
DelphinCoder
Ситуация:
1. Запускаем интерпритатор и вводим
from mylib import MYCONST
print MYCONST
2. Изменяем ручками значение MYCONST и сохраняем файл с ним
3. В том же окне интерпретатора что и в пункте 1 снова вводим
from mylib import MYCONST
print MYCONST
А теперь проблема: оба раза при печати MYCONST выводится ее начальное значение (на момент первого импорта данной константы)
А нужно, чтобы каждый раз при импорте значение считывалось заново.

PS
да, я понимаю что такой механизм снизит производительность, но мне важно добиться именно такого поведения интерпретатора
sp3
import module
reload(module)
Андрей Светлов
Уверен, ваша хотелка уводит в сторону от хорошего решения.
Если нужно исполнять код каждый раз - используйте execfile. Ему можно передавать globals/locals.
В подавляющем большинстве случаев realod не нужен. Я видел относительно немного исключений.
DelphinCoder
reload это уже близко к истине.
чуть больше предистории: это нужно при работе веб-приложения. апач стартует интерпретатор. в ответ на некоторые действия пользователя перезаписывается файл с настройками. нужно после его изменения заставить все модули, которые его импортируют заново импортировать значения настроек, а не брать из кеша.
отсюда вопрос: если я после изменения запущу reload(settings) - это заставит всех прочитать новые настройки? //сорри за глупый вопрос, который могу проверить сам, просто не скоро попаду к рабочей машине
Александр Кошелев
DelphinCoder
если я после изменения запущу reload(settings) - это заставит всех прочитать новые настройки?
Нет.
DelphinCoder
в ответ на некоторые действия пользователя перезаписывается файл с настройками. нужно после его изменения заставить все модули, которые его импортируют заново импортировать значения настроек, а не брать из кеша.
Вы не должны этого хотеть.

Вы решаете не ту проблему. Держите настройки не в исходном коде, а где-то где вы можете их изменять и при этом читать каждый раз актуальное значение.
DelphinCoder
Daevaorn
DelphinCoder
если я после изменения запущу reload(settings) - это заставит всех прочитать новые настройки?
Вы решаете не ту проблему. Держите настройки не в исходном коде, а где-то где вы можете их изменять и при этом читать каждый раз актуальное значение.
Спасибо за совет, но задача стоит именно так, как я ее описал.
Если кто знает как этот “кеш” сбросить глобально для текущего инстанса питона - подскажите плиз
Александр Кошелев
DelphinCoder
Спасибо за совет, но задача стоит именно так, как я ее описал.
Хороший повод поменять её стояние.
DelphinCoder
я бы с радостью, но поменять никак нельзя. в будущем эта задача выльется в систему кодогенерации.
вот сгенерировали мы код, а чтобы его интерпретатор воспринял нужно его перезапустить - а вот это как раз и не есть гут.
т.ч. давайте без углубления в архитектуру программных систем и анализа правильности постановки задачи.
реализуема ли задача кодогенерации на питоне без перезапуска интерпретатора? или питон для этого не подходит и писать такие вещи лучше на так ненавистном мне php???
ZZZ
Да, реализуема. Но подход неправильный – ищите другое решение или пишите на пиашпи.
ZAN
в твистеде есть релоадер ( twisted.python ), думаю стоит глянуть его исходники, если привязать к изменению файла - будет вполне неплохо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB