在不同的地方导入时重新导入Python模块

时间:2013-08-12 13:24:56

标签: python

我是python的新手,我有一个简单的python模块,其中包含一些常量,这些常量正被其他文件中的某些代码修改。我希望这些都是一样的。即

a.py

start = True

b.py

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

c.py

import a
a.start =False

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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()