多个进程之间共享配置变量
Posted
技术标签:
【中文标题】多个进程之间共享配置变量【英文标题】:Shared config variable between multiple processes 【发布时间】:2019-05-28 14:22:11 【问题描述】:假设你有一个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']
在运行foo.py
后,您如何使bar.py
中的打印值与新值保持同步,而不会明显再次读取文件,因为bar.py
中的while 循环需要尽可能快尽可能!
我目前在单独的 bash 线程上运行这些,即:
$ python bar.py
$ python foo.py
但如果可能的话,我可以在线程中运行 bar 吗?
【问题讨论】:
***.com/questions/13034496/… 是否使用任何标准 IPC 机制作为 foo 和 bar 之间通信的选项? 我从bar.py
threading.Thread()
中的一个线程运行foo.py
【参考方案1】:
我不知道你需要多快。但是当然可以用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,对于早期版本的 Python 3 使用 imp.reload
,对于 Python 2 使用 reload
。
【讨论】:
以上是关于多个进程之间共享配置变量的主要内容,如果未能解决你的问题,请参考以下文章