有关背景资料:请转HERE!
我有一个非常大的模块,可以从互联网上获取内容,其他内置脚本等等。根据网络速度,内存和编译列表等因素,导入时间可能在25之间。秒和90秒。我使用以下代码来跟踪模块导入的时间:
def importTime():
import time
startTime = time.time()
import tms # This is the name of my module
print("Time taken {}".format(time.time() - startTime)))
当我运行时:
>>> importTime()
Loading Module. This may take up to 60 seconds. # This is my module output
Time taken 31.49
这就是我想要发生的事情:
>>> import tms
Loading Module. This may take up to 60 seconds.
Time taken: 31.49 seconds
这是我的问题。这是我在导入模块之前必须定义的函数。我需要做的是让我的模块能够在启动时执行此操作。我已经看了这个question,但它是相同的概念。有没有人有任何想法?
答案 0 :(得分:4)
您可以重载导入模块时调用的__import__
函数:
import time
import __builtin__
# save the original __import__ function
original_import = __builtin__.__import__
def custom_import(name, globals=None, locals=None, fromlist=None, level=-1):
startTime = time.time()
# call original __import__ function
result = original_import(name, globals, locals, fromlist, level)
endTime = time.time()
print('Time used to load module {}: {}'.format(name, endTime - startTime))
# return result
return result
# replace builtin __import__ function
__builtin__.__import__ = custom_import
答案 1 :(得分:2)
通常不希望在模块导入时进行大量工作 - 这会对文档扫描程序,IDE,单元测试框架等造成严重破坏。理想情况下,应该重写tms
以在函数中完成其工作。但要解决您的问题,只需编写一个导入模块的简短模块。您甚至可以将其命名为tms
并重命名原件,以便其他导入器获得相同的功能(如果需要的话)。
tmsx.py
import time
startTime = time.time()
from tms import * # This is the name of my module
print("Time taken {}".format(time.time() - startTime)))
现在只需导入tmsx
>>> import tmsx
Loading Module. This may take up to 60 seconds.
Time taken: 31.49 seconds