当前位置: 首页 > 面试题库 >

多个文件中的Python全局变量

巫马玉堂
2023-03-14
问题内容

我有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,并且有人可以帮助我。如果您需要更多信息,请随时询问。


问题答案:

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

并没有您希望存在的魔术:就像您正在运行同一程序的两个实例一样,每个实例都有其变量实例(全局或其他)。

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

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



 类似资料:
  • 问题内容: 我的一堆JavaScript代码位于一个名为helpers.js的外部文件中。在调用此JavaScript代码的HTML内,我发现自己需要知道是否已经调用了helpers.js中的某个函数。 我试图通过定义以下内容来创建全局变量: 在我的HTML代码和helpers.js中的全局范围内。 这是我的html代码如下所示: 我想做的事可行吗? 问题答案: 您需要在包含helpers.js文

  • 问题内容: 我正在编写一个C(共享)库。它最初是一个翻译单元,我可以在其中定义几个全局变量,以将其隐藏在外部模块中。 现在该库已扩展,我想将该模块分为几个较小的源文件。问题在于,对于上述全局变量,我现在有两个选择: 在每个源文件上都有私有副本,并通过函数调用以某种方式同步它们的值-这将非常丑陋,非常快。 删除定义,以便使用- 在所有翻译单元之间共享变量,但是,如果在此处进行了必需的声明,则链接到库

  • 问题内容: 因此,我有两个不同的文件,如下所示: file1.py file2.py 但是我似乎无法让file2识别来自file1的变量,即使它已经导入到file1中也是如此。如果可以某种方式实现,那将非常有帮助。 问题答案: 导入在使得全球(即,模块级)的约束名字提供给下面的代码-唯一的此类名称是。它并 没有 做反向:在定义的名称并不提供给代码的时候进口。即使您以正确的方式(如@nate正确建议

  • 问题内容: 我正在尝试使用exec运行一段python代码。 这导致以下输出 但是,如果我将代码更改为此- 然后工作正常-提供以下输出- 显然,A存在并且可以访问-在第一段代码中出了什么问题?我正在使用2.6.5,欢呼声, 科林 更新1 如果我检查类中的locals()- 然后很明显,locals()在两个地方都不相同- 但是,如果我这样做,就没有问题- 更新2 好的,所以这里的文档-http:

  • 问题内容: 此代码为何起作用: 但这给出了“分配前引用的局部变量’var’”错误: 问题答案: 因为在第一个代码中,您已经创建了一个局部变量并使用了它的值,而在第二个代码中,您正在使用局部变量,而没有对其进行定义。 因此,如果要使第二个功能正常工作,则需要声明:- 在使用该功能之前。 而在此代码中: 更新 :- 但是,按照@Tim的注释,您不应在函数内部使用变量。最好在使用变量之前先定义变量,然后

  • 本文向大家介绍python跨文件使用全局变量的实现,包括了python跨文件使用全局变量的实现的使用技巧和注意事项,需要的朋友参考一下 Python 定义了全局变量的特性,使用global 关键字修饰 但是他的一大缺陷就是只能本module 中也就是本文件中使用,跳出这个module就不行。 try 1: 使用一个更宏观的思路,全局变量就用全局加载的模块解决,很遗憾也是不行, file_1: fi