3

我查看了其他一些解决问题的线程,但不太明白。

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

配置文件

flag = False

测试1.py

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

测试2.py

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

如果现在我运行Test1.pyand ,我可以在输出中Test2.py看到切换吗?'True' 'False'我现在不关心同步,只要它可以访问共享变量,就可以了。

谢谢。

4

2 回答 2

4

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

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

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

还有其他选择:

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

线程示例:

配置文件

flag = False

测试.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

于 2013-01-09T22:59:58.240 回答
1

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

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

另一种选择是存储并持续从磁盘加载值,可能通过将其保存在文本文件中或使用SQLite

于 2013-01-09T23:05:00.613 回答