多个文件中的Python全局变量

时间:2015-04-17 14:26:02

标签: python global-variables global multiple-files

我有2个守护进程,它们应该访问相同的变量。 我为全局变量创建了第3个文件,每个守护进程都可以访问该变量。但是当一个人改变变量时,另一个人仍然会看到默认值。

示例:

glob.py

time = 0

守护进程a:

import datetime
import time
import glob

while(True):
    glob.time = datetime.datetime.now()
    time.sleep(30)

守护进程b:

import glob

while(True):
    print(glob.time)

每次都会打印0 我希望我的问题清楚,有人可以帮助我。 如果您需要更多信息,请随时提出。

2 个答案:

答案 0 :(得分:2)

看起来(尽管你没有明确说明)你正在以一种完全独立的方式运行你的程序:两个不同的Python解释器调用。

没有你希望存在的魔法:就好像你有两个相同程序的实例在运行,每个实例都有变量实例(全局或其他)。

如果您正在执行一些简单的任务,更简单的方法是将一个文本文件作为每个进程的输出,另一个进程尝试从其想要了解的每个进程生成的文件中读取信息 - (你甚至可以在Unix中使用命名管道。)

另一种方法是使用Python脚本使用multiprocessing stdlib模块协调守护进程的启动,然后创建multiprocessing.Manager对象以在进程之间直接共享变量。 首先设置起来可能会更复杂,但这样做很干净。检查Manager类上的文档: https://docs.python.org/3/library/multiprocessing.html

答案 1 :(得分:2)

How do I share global variables across modules?

  

在单个程序中跨模块共享信息的规范方法是创建一个特殊模块(通常称为config或cfg)。只需在应用程序的所有模块中导入配置模块;然后该模块可用作全局名称。因为每个模块只有一个实例,所以对模块对象所做的任何更改都会反映在任何地方。:

import time
import glb

while(True):
    glb.t +=  1
    time.sleep(3)
    print glb.t 

b.py:

import glb
import a
while(True):
    print(glb.t)

glb.py:

t = 0

启动a.py后的输出:

python b.py
1
2
3
4
5
6