我发现我的python脚本的执行有时需要更长的时间才能导入库。如果我最近没有执行脚本或者我从其他服务器运行脚本,则会发生这种情况。第一次延迟后,导入时间变得更快。我想知道造成这种缓慢导入的原因是什么,以及是否有任何方法可以阻止它?
import time
s_time = time.time()
import sys,re,os,logging,signal
from argparse import ArgumentParser
print('Internal Import Time: {}'.format(time.time() - s_time))
s_time = time.time()
from backtrace import Backtrace,BacktraceSet
from report import Report
from core import Core
from burtapi import BurtAPI
print('External Import Time: {}'.format(time.time() - s_time))
在这个示例中,backtrace,report,core和burtapi是我创建的库。
[name@server1 tool]$ ./tool --python
Internal Import Time: 2.8281359672546387
External Import Time: 13.053943157196045
Enter/Paste your content. Ctrl-D to save it.
^CYou pressed Ctrl+C!
[name@server1 tool]$ ./tool --python
Internal Import Time: 0.12279081344604492
External Import Time: 0.6948020458221436
Enter/Paste your content. Ctrl-D to save it.
^CYou pressed Ctrl+C!
ssh to different server (with same storage mount)
[name@server2 tool]$ ./tool --python
Internal Import Time: 3.0217390060424805
External Import Time: 13.151482105255127
Enter/Paste your content. Ctrl-D to save it.
^CYou pressed Ctrl+C!
[name@server2 tool]$
./ tool是一个调用python3 /path/to/script.py
答案 0 :(得分:1)
这里有更多因素,但有三个主要因素:
首先 - 导入模块需要在系统上查找模块,这需要从磁盘读取数据。
第二 - 有了这个,如果在这些模块中进行了任何更改,解释器将需要咬合编译它们。
最后但并非最不重要的是,当解释器开始导入它们时,模块本身可能包含需要执行的指令/代码,这些指令/代码可能执行大量操作。假设其中一个模块连接到数据库或必须通过大型哈希表过滤......
编辑:我应该指出那些是假设,并且很难说出你的情况究竟发生了什么,但在大多数情况下,这就是正在发生的事情。