Общая переменная конфигурации между несколькими процессами

Скажи, что у тебя есть 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.

Другие вопросы по тегам