2

我对 python 比较陌生,我有一个简单的 python 模块,其中包含一些常量,这些常量正在被其他文件中的一些代码修改。我希望这些都是一样的。IE

一个.py

start = True

b.py

import a
while(a.start):
 //do something

py

import a
a.start =False

我对 python 模块的理解是,它就像一个单例,任何模块都只导入一次。所以,当我尝试运行b.py然后运行c.py时,我期望的是:

  • b.py循环
  • c.py设置开始为假
  • b.py在从同一个模块导入时停止循环

但是,当我运行它时,我认为正在发生的事情是模块被重新导入为副本并且b.py永远不会停止运行。有什么我在做一些非常基本的错误吗?

4

2 回答 2

5

Python 模块是解释器一次运行中的单例。

c.py单独的进程中运行不会改变start另一个 Python 解释器中的值。

于 2013-08-12T13:27:54.680 回答
2

正如 Martijn 解释的那样,Python 模块是同一进程中的单例。为了实现你想要做的事情,你需要实现某种形式的进程间通信。举一个简单的例子,您可以写入文件:

# a.py
import os

REQUEST_FILE = 'stop-request'

def should_stop():
    return os.path.exists(REQUEST_FILE)

def clear():
    if os.path.exists(REQUEST_FILE):
        os.unlink(REQUEST_FILE)

def request_stop():
    with open(REQUEST_FILE, 'w'):
        pass

# b.py
import a
a.clear()     # avoid leftover stop-request stopping us before we've started
while not a.should_stop():
    # ... do something ...

# c.py
import a
a.request_stop()
于 2013-08-12T13:39:47.747 回答