多个进程之间共享配置变量

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.pyfoo.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

【讨论】:

以上是关于多个进程之间共享配置变量的主要内容,如果未能解决你的问题,请参考以下文章

Varnish的VCL

使用文件锁的进程之间的条件变量

WCF IIS 托管服务由单个服务实现的多个服务合同 - 如何通过配置在端点之间共享 uri

使用 NSUserDefault 在多个进程之间共享数据

Zookeeper简单配置

多处理:如何在多个进程之间共享一个字典?