Форум сайта python.su
Ситуация:
1. Запускаем интерпритатор и вводим
from mylib import MYCONST
print MYCONST
from mylib import MYCONST
print MYCONST
Офлайн
import module
reload(module)
Офлайн
Уверен, ваша хотелка уводит в сторону от хорошего решения.
Если нужно исполнять код каждый раз - используйте execfile. Ему можно передавать globals/locals.
В подавляющем большинстве случаев realod не нужен. Я видел относительно немного исключений.
Офлайн
reload это уже близко к истине.
чуть больше предистории: это нужно при работе веб-приложения. апач стартует интерпретатор. в ответ на некоторые действия пользователя перезаписывается файл с настройками. нужно после его изменения заставить все модули, которые его импортируют заново импортировать значения настроек, а не брать из кеша.
отсюда вопрос: если я после изменения запущу reload(settings) - это заставит всех прочитать новые настройки? //сорри за глупый вопрос, который могу проверить сам, просто не скоро попаду к рабочей машине
Офлайн
DelphinCoderНет.
если я после изменения запущу reload(settings) - это заставит всех прочитать новые настройки?
DelphinCoderВы не должны этого хотеть.
в ответ на некоторые действия пользователя перезаписывается файл с настройками. нужно после его изменения заставить все модули, которые его импортируют заново импортировать значения настроек, а не брать из кеша.
Офлайн
DaevaornСпасибо за совет, но задача стоит именно так, как я ее описал.DelphinCoderВы решаете не ту проблему. Держите настройки не в исходном коде, а где-то где вы можете их изменять и при этом читать каждый раз актуальное значение.
если я после изменения запущу reload(settings) - это заставит всех прочитать новые настройки?
Офлайн
DelphinCoderХороший повод поменять её стояние.
Спасибо за совет, но задача стоит именно так, как я ее описал.
Офлайн
я бы с радостью, но поменять никак нельзя. в будущем эта задача выльется в систему кодогенерации.
вот сгенерировали мы код, а чтобы его интерпретатор воспринял нужно его перезапустить - а вот это как раз и не есть гут.
т.ч. давайте без углубления в архитектуру программных систем и анализа правильности постановки задачи.
реализуема ли задача кодогенерации на питоне без перезапуска интерпретатора? или питон для этого не подходит и писать такие вещи лучше на так ненавистном мне php???
Офлайн
Да, реализуема. Но подход неправильный – ищите другое решение или пишите на пиашпи.
Офлайн
в твистеде есть релоадер ( twisted.python ), думаю стоит глянуть его исходники, если привязать к изменению файла - будет вполне неплохо
Офлайн