繁体   English   中英

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

[英]Python: how to share a variable between two modules

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

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

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'在输出? 我不关心此时的同步,只要它可以访问共享变量,那就完成了。

谢谢。

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

您正在开始两个不同的(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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM