【问题标题】:How safe is it to import a module multiple times? [duplicate]多次导入一个模块有多安全? [复制]
【发布时间】:2012-09-19 01:58:02
【问题描述】:

我一直在想这个问题:多次导入一个模块是否保证安全?当然,如果模块执行诸如写入文件之类的操作系统操作,那么可能不会,但是对于大多数简单模块来说,简单地执行导入是否安全?是否有管理模块全局状态的约定?

【问题讨论】:

  • 我不知道多次导入一个模块有多安全,但我不明白你为什么要这样做,为什么不直接使用imp.reload
  • 好消息是(正如您在哪个重复的问题中看到的那样)无论您导入模块多少次,导入只会发生一次

标签: python


【解决方案1】:

是的,您可以在一个 Python 程序中多次import module,无论它是什么模块。第一个之后的每个import 访问缓存的模块而不是重新评估它。

【讨论】:

  • 你可以在sys.modules看到缓存的模块。
【解决方案2】:

以一万个不同的名称导入os模块似乎没有任何问题。

for i in range(10000):
    exec("import os as foo%i" % i)

for i in range(10000):
    exec("foo%i.getcwd()" % i)

使用不同类的导入:

for i in range(10000):
    exec("""class FooClass%i:
    import os as foo%i
    print foo%i.getcwd()""" % (i,i,i))

两者都运行没有问题。当然不能保证,但至少看起来您不会立即遇到实际问题。

【讨论】:

  • 嗯,这是有充分理由的……这是设计使然。
  • @nneonneo:当然可以,但如果你不确定,测试总不会有坏处,对吧?
  • 我会说,即使你认为你肯定知道,测试也无妨。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多