如何衡量Python导入延迟

时间:2010-08-24 15:23:22

标签: python import

我的django应用程序需要永远加载,所以我想找到一种方法来测量导入延迟,这样我就可以找到有问题的模块并让它懒得加载。

有明显的方法吗?我正在考虑调整import语句本身以产生延迟,但我不确定如何做到这一点。我想将导入树(或DAG?)与延迟一起使用是理想的,但只是一系列延迟和导入语句就足够了。

1 个答案:

答案 0 :(得分:7)

您可以重新定义the __import__ built-in function以记录开始和结束时间(将其他所有内容委派给原始内置__import__)。这正是 在Python中“调整import语句”的方式:重新定义__import__

编辑:这是一个简单的例子......:

import sys

import __builtin__
_orgimp = __builtin__.__import__

import logging
FORMAT = "%(asctime)-15s %(message)s"
logging.basicConfig(format=FORMAT, level=logging.INFO)

def __import__(name, *a):
  r = sys.modules.get(name)
  if r is not None: return r
  logging.info('import bgn %s', name)
  r = _orgimp(name, *a)
  logging.info('import end %s', name)
  return r
__builtin__.__import__ = __import__

import pyparsing

这显示在我的系统上:

2010-08-24 08:36:39,649 import bgn pyparsing
2010-08-24 08:36:39,652 import bgn weakref
2010-08-24 08:36:39,652 import bgn _weakref
2010-08-24 08:36:39,653 import end _weakref
2010-08-24 08:36:39,653 import end weakref
2010-08-24 08:36:39,654 import bgn copy
2010-08-24 08:36:39,655 import bgn org.python.core
2010-08-24 08:36:39,656 import end copy
2010-08-24 08:36:39,675 import end pyparsing

当然,您可以解析此日志以显示嵌套(哪个模块首先导入了其他模块)“尝试导入”失败(此处为org.python.core来自{ {1}},毫无疑问在copy / try声明中)以及每次导入开始和结束的时间(后者只有当它确实结束时,当然,如果它失败了 - 使用except / try或其他任何内容轻松调整以获得您喜欢的确切行为! - 。