Python:如何在两个模块之间共享变量

时间:2013-01-09 22:54:15

标签: python

我已经查看了一些解决问题的其他线程,但并未完全理解。

假设我有一个包含共享变量的配置文件:

Config.py

flag = False

Test1.py

import config
while(1):
    config.flag = True
    print config.flag

Test2.py

import config
while(1):
    config.flag = False
    print config.flag

如果现在我运行Test1.pyTest2.py,我是否可以看到输出中'True' 'False'之间的切换?我不关心此时的同步,只要它可以访问共享变量,那就完成了。

感谢。

2 个答案:

答案 0 :(得分:4)

没有。只要您在不同的进程中运行这两个实例,内存就不会被神奇地共享。

您正在启动两个不同的(Python)流程。这些进程导入配置模块。简化,这只是在config.py中加载代码的一种形式。这些流程之间没有进一步的沟通。

(作为旁注,config.py中的代码仅在第一次解释时,它被编译并保存在单独的config.pyc中,加载速度更快。下次编辑config.py时,config.pyc将被重新创造)。

还有其他选择:

  • 使用线程
  • 使用其他形式的内存共享,例如管道。

线程示例:

config.py

flag = False

test.py

import thread
import time

import config


def test1():
    while 1:
        config.flag = True
        time.sleep(0.7)
        print 'test1:', config.flag
        time.sleep(1)

def test2():
    while 1:
        config.flag = False
        time.sleep(1.1)
        print 'test2:', config.flag
        time.sleep(1)

thread.start_new(test1, ())
test2()

发布您尝试执行此操作的原因可能会有所帮助。多线程是一个难题。这个问题可能有用:https://stackoverflow.com/questions/4690518/multithreading-in-python

答案 1 :(得分:1)

不,在Test1.py和Test2.py之间不会共享config.flag。 Test1.py和Test2.py将在Python解释器的不同实例上运行。每个解释都将config.py加载到它自己的内存块中。

一种选择是使用threading在同一个Python实例上运行Test1.py和Test2.py。

另一种选择是存储并连续加载磁盘中的值,可能是将其保存在文本文件中,也可以使用SQLite