如果事情的结构与您在问题正文中编写示例的方式完全相同(但不是在您的标题中),那么对我来说,在 Python 2.7 中,c.py 中的简单 reload(a) 可以按照您的意愿工作:
# a.by
import time
MAPPINGS = {time.strftime('%Y-%m-%d %H:%M:%S'):''}
# b.py
import a
def dowork():
for key,value in a.MAPPINGS.iteritems():
print key
# c.py
import a
def manage_mapping():
reload(a)
if __name__ == '__main__':
import time
from b import dowork
dowork()
time.sleep(2)
manage_mapping()
dowork()
如果我这样做
$ python c.py
然后我得到:
2017-05-24 16:31:31
2017-05-24 16:31:33
这表明c从b的角度成功刷新了a.MAPPINGS。
现在,如果b.py 包含from a import MAPPINGS(如您的title)后跟MAPPINGS 的引用,而不是import a 后跟a.MAPPINGS 的引用,那么这是不同的:
# b.py
from a import MAPPINGS
def dowork():
for key,value in MAPPINGS.iteritems():
print key
在这种情况下,b.py 在名称 'MAPPINGS' 和在模块 a 中创建的原始 dict 之间创建自己的关联。如果重新运行a.py,它会创建一个新的dict,但模块b 仍然包含并使用它自己对旧的引用。所以现在你会得到两个相同的时间戳。有两个潜在的修复:(1)更改为import a + a.MAPPINGS,而不是from a import MAPPINGS + MAPPINGS,或(2)将导入向下移动到dowork(),因此刷新的MAPPINGS是每次要使用时在本地重新导入:
# b.py
def dowork():
from a import MAPPINGS
for key,value in MAPPINGS.iteritems():
print key
我会采用方法(1)。