Общая переменная конфигурации между несколькими процессами - PullRequest
0 голосов
/ 01 января 2019

Скажем, у вас есть 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 в любое время безочевидное чтение файла снова, поскольку цикл while в bar.py должен быть максимально быстрым!

В настоящее время я запускаю их в отдельных потоках bash, например:

$ python bar.py
$ python foo.py

Но я могзапустить бар в потоке, если это возможно?

1 Ответ

0 голосов
/ 01 января 2019

Я не знаю, как быстро вам это нужно.Но, безусловно, можно было бы просто перезагрузить модуль config с помощью importlib.reload.Так что config.py и foo.py остаются прежними, и ваши bar.py изменяются на:

import importlib
import config

while True:
    print config.settings['foo']
    sleep(10)
    importlib.reload(config)

Обновление

Пример выше работает для Python> = 3.4, используйте imp.reload для более ранних версий Python 3 или reload для Python 2.

...