2013-07-25 1 views
1

Итак, у меня есть следующий вопрос:Keep модуль импортирован питон "свежий"

У меня есть следующие: x.py:

from y import aFunc 

y.py:

from z import aDict 

Теперь x запускается в режиме ожидания, сна, повторяет расписание. Затем он вызывает aFunc для определенных файлов. aFunc использует значения в aDict и затем возвращает.

aDict находится в модуле python, который управляется пользователем в отделе econ. Я понимаю, что импорт вызывается один раз, а затем кэшируется. Даже если бы я должен был поставить оператор import внутри aFunc, он все равно будет импортироваться только один раз, а затем кэшироваться (пожалуйста, поправьте меня, если я ошибаюсь).

Но я хочу, чтобы иметь возможность подобрать любые изменения в aDict на лету, другими словами, я хотел бы повторно импортировать z.aDict каждый раз, когда х называется y.aFunc

Любой совет будет высоко ценим!

+1

Это звучит, как вы используете модули для данных. Это звучит неплохо, особенно если кто-то посередине обновляет файл 'z.py' при попытке импортировать его. – user2357112

ответ

3

Вы можете использовать перезагрузку, но вы не можете использовать

from z import aDict 

Вы можете сделать что-то вроде:

reload(z) 
#do something with z.aDict here 
+0

Это правда, спасибо за совет. и вы получите знак «ответ» – mlnyc

+1

Чтобы ваши имена были неквалифицированными, как они есть, просто выполните «aDict = z.aDict» после каждой перезагрузки. – 9000

0

Похоже, я нашел ответ. Это с reload (aDict), который, кажется, сохраняет все свежее ... Надеюсь, это поможет другим!

Редактировать: Whoops! перезагрузка может принимать только модули. Итак, что я закончил делать, это импортировать весь модуль, а затем префикс z.aDict в моем коде.

reload from python docs

+0

reload() может принимать только модули в качестве аргумента – sedavidw

+0

Было бы лучше, если бы вы нажали зеленую галочку под заголовком @ sedavidw. Это означало бы, что ответ «принят». – 9000

+0

Да, я просто жду времени, чтобы пройти, чтобы я мог принять его ответ ... – mlnyc