python 导入何时加载到内存中?
When are python imports loaded in memory?
从早期关于 SO 的问题,如 this and ,似乎简单的 import
关键字不会延迟加载模块。但是,当我 运行 一个简单的测试来检查 import
语句前后的内存使用情况时 - 似乎某些模块确实是延迟加载的。
示例:
>>> import django
>>> from django.http import HttpResponse
内存使用(第一个free
命令在第一次导入后为运行,第二个free
命令在第二次导入后为运行):
$ free -m
total used free shared buff/cache available
Mem: 3935 1773 399 0 1762 1889
$ free -m
total used free shared buff/cache available
Mem: 3935 1787 386 0 1762 1875
注意已用内存从 1773MB 增加到 1787MB。
我想了解模块何时真正加载到内存中?为什么 import django
命令没有加载内存中的所有 Django 模块?
it seems that the simple import keyword does not do lazy loading of modules.
应该怎么办? import
必须保证导入文件/模块中的代码 __init__.py
在导入时执行。
只需尝试以下操作:制作一个文件 test.py
,只包含 print("hey!")
,并且在同一目录中 import .test
。您会注意到 import 实际上与仅执行 test.py
.
中的代码没有什么不同
I am trying to understand when does a module actually get loaded in memory?
import name
实际上只是在name
命名空间下执行当前命名空间中的指定代码。如果您在该代码中定义了一个 class,那么它立即可见,必须进行解析,诸如此类。
And why does an import django command not load all of django modules in memory?
因为在 import django
上执行的代码根本不会那样做。 (就像它没有起来给我们做当之无愧的咖啡一样!)
import some_pgk
所做的是 运行 some_pkg.__init__
文件
这是 django 的初始化文件
from django.utils.version import get_version
VERSION = (4, 0, 0, 'alpha', 0)
__version__ = get_version(VERSION)
def setup(set_prefix=True):
...
...
如你所见,它并没有做太多,它只设置了版本,这就是为什么其他模块(例如 django.http)在 运行ning import django
从早期关于 SO 的问题,如 this and import
关键字不会延迟加载模块。但是,当我 运行 一个简单的测试来检查 import
语句前后的内存使用情况时 - 似乎某些模块确实是延迟加载的。
示例:
>>> import django
>>> from django.http import HttpResponse
内存使用(第一个free
命令在第一次导入后为运行,第二个free
命令在第二次导入后为运行):
$ free -m
total used free shared buff/cache available
Mem: 3935 1773 399 0 1762 1889
$ free -m
total used free shared buff/cache available
Mem: 3935 1787 386 0 1762 1875
注意已用内存从 1773MB 增加到 1787MB。
我想了解模块何时真正加载到内存中?为什么 import django
命令没有加载内存中的所有 Django 模块?
it seems that the simple import keyword does not do lazy loading of modules.
应该怎么办? import
必须保证导入文件/模块中的代码 __init__.py
在导入时执行。
只需尝试以下操作:制作一个文件 test.py
,只包含 print("hey!")
,并且在同一目录中 import .test
。您会注意到 import 实际上与仅执行 test.py
.
I am trying to understand when does a module actually get loaded in memory?
import name
实际上只是在name
命名空间下执行当前命名空间中的指定代码。如果您在该代码中定义了一个 class,那么它立即可见,必须进行解析,诸如此类。
And why does an import django command not load all of django modules in memory?
因为在 import django
上执行的代码根本不会那样做。 (就像它没有起来给我们做当之无愧的咖啡一样!)
import some_pgk
所做的是 运行 some_pkg.__init__
文件
这是 django 的初始化文件
from django.utils.version import get_version
VERSION = (4, 0, 0, 'alpha', 0)
__version__ = get_version(VERSION)
def setup(set_prefix=True):
...
...
如你所见,它并没有做太多,它只设置了版本,这就是为什么其他模块(例如 django.http)在 运行ning import django