我有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 我希望我的问题清楚,有人可以帮助我。 如果您需要更多信息,请随时提出。
答案 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