多个进程之间共享配置变量
Shared config variable between multiple processes
假设你有一个 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
中的 while 循环需要尽可能快!
我目前 运行 这些在单独的 bash 线程上,即:
$ python bar.py
$ python foo.py
但如果可能的话,我可以 运行 在一个线程中发帖?
我不知道你需要多快。但肯定可以只用 importlib.reload
重新加载 config
模块。所以 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
for earlier versions of Python 3 or reload
用于 Python 2.
假设你有一个 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
中的 while 循环需要尽可能快!
我目前 运行 这些在单独的 bash 线程上,即:
$ python bar.py
$ python foo.py
但如果可能的话,我可以 运行 在一个线程中发帖?
我不知道你需要多快。但肯定可以只用 importlib.reload
重新加载 config
模块。所以 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
for earlier versions of Python 3 or reload
用于 Python 2.