在Python中,使用类实例化导入两次?

时间:2013-12-16 11:12:33

标签: python

models.py我有:

...
db = SQLAlchemy(app)

class User(db.Document):
...

在我的应用中serve.pymodels.py致电:

from models import User 

这种双重导入会实例化数据库两次并可能导致问题吗?

2 个答案:

答案 0 :(得分:11)

  

这种双重导入会实例化数据库两次并可能导致问题吗?

不,不会。导入模块后,无论通过import语句进行任何进一步导入,它都可用。

导入后,模块存储在sys.modules

如果您想重新加载模块,则必须使用reload(module)

示例: bar.py

xs = [1, 2, 3]

导入两次:

>>> from bar import xs
>>> id(xs)
140211778767256
>>> import bar
>>> id(bar.xs)
140211778767256

请注意标识是完全相同的吗?

<强>缓存:

>>> import sys
>>> sys.modules["bar"] is bar
True

答案 1 :(得分:3)

不,它不会。导入在Python中缓存,因此再次导入同一模块不会导致它再次执行。

您可以轻松确认顺便说一句。如果您只是将打印件放入要导入的模块中。如果多次看到输出,则会多次执行该模块。但这根本不会发生。