在多个文件中的Python全局变量在多个文件中的Python全局变量(Python Global V

2019-05-12 10:51发布

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

例:

glob.py

time = 0

后台程序:

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,每次我希望我做了我的问题清楚,有人能帮助我。 如果你需要一些更多的信息,请随时提问。

Answer 1:

它看起来像(虽然你不告诉明确表示),你是在一个完全独立的方式运行您的程序:Python解释器的两个不同的调用。

还有,你希望会存在这样的神奇:就像你有相同的程序运行的两个实例,每个人都会有它的变量(全局或其他方式)的实例。

如果您正在执行一些简单的任务,更简单的方法去是有一个文本文件作为每个过程输出,以及其他工艺试图读取由每次想了解过程中产生的文件的信息 - (你甚至可以使用命名管道在Unix系统)。

另一种方法是有一个Python脚本来协调使用您的守护进程的开始multiprocessing STDLIB模块,然后创建一个multiprocessing.Manager对象直接在进程之间共享变量。 这可能是更复杂的设置在第一,但它是干净的事情。 检查Manager类的文档在这里: https://docs.python.org/3/library/multiprocessing.html



Answer 2:

如何跨模块共享的全局变量?

到单个程序中共享跨模块信息的规范的方式是创建一个特殊的模块(通常称为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


文章来源: Python Global Variables in multiple files