Общая переменная конфигурации между несколькими процессами
Скажи, что у тебя есть config.py
который внутри имеет
settings = read_yaml('settings.yaml')
так config.settings
это словарь
в одном сценарии foo.py
у тебя есть:
import config
config.settings['foo'] = str(time.time())
write_yaml('settings.yaml', config.settings)
и в другом скрипте bar.py
у тебя есть
import config
while True:
sleep(10)
print config.settings['foo']
Как бы вы сохранили напечатанное значение в bar.py
в курсе с новым значением после запуска foo.py
в любое время без явного чтения файла снова, видя, как цикл в bar.py
должно быть как можно быстрее!
В настоящее время я запускаю их в отдельных потоках Bash, т.е.
$ python bar.py
$ python foo.py
Но я мог бы запустить бар в потоке, если это возможно?
1 ответ
Я не знаю, как быстро тебе это нужно. Но было бы возможно просто перезагрузить config
модуль с importlib.reload
, Так config.py
а также foo.py
оставайся таким же и твой bar.py
изменения в:
import importlib
import config
while True:
sleep(10)
print config.settings['foo']
importlib.reload(config)
Обновить
Пример выше работает для Python >= 3.4, используйте imp.reload
для более ранних версий Python 3 или reload
для Python 2.