我有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,每次我希望我做了我的问题清楚,有人能帮助我。 如果你需要一些更多的信息,请随时提问。
它看起来像(虽然你不告诉明确表示),你是在一个完全独立的方式运行您的程序:Python解释器的两个不同的调用。
还有,你希望会存在这样的神奇:就像你有相同的程序运行的两个实例,每个人都会有它的变量(全局或其他方式)的实例。
如果您正在执行一些简单的任务,更简单的方法去是有一个文本文件作为每个过程输出,以及其他工艺试图读取由每次想了解过程中产生的文件的信息 - (你甚至可以使用命名管道在Unix系统)。
另一种方法是有一个Python脚本来协调使用您的守护进程的开始multiprocessing
STDLIB模块,然后创建一个multiprocessing.Manager对象直接在进程之间共享变量。 这可能是更复杂的设置在第一,但它是干净的事情。 检查Manager类的文档在这里: https://docs.python.org/3/library/multiprocessing.html
如何跨模块共享的全局变量?
到单个程序中共享跨模块信息的规范的方式是创建一个特殊的模块(通常称为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