Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么导入openpyxl需要这么长时间?_Python_Tkinter_Openpyxl - Fatal编程技术网

Python 为什么导入openpyxl需要这么长时间?

Python 为什么导入openpyxl需要这么长时间?,python,tkinter,openpyxl,Python,Tkinter,Openpyxl,我用PythonTkinter编写了一个GUI程序,注意到它的启动速度非常慢,窗口显示需要8秒钟!我检查了代码,最后发现是因为一个名为openpyxl的Excel读/写模块。当我注释掉这一行时:importopenpyxl。GUI窗口立即显示 我还尝试在python提示符下运行代码import-openpyxl,几乎花了3秒钟完成了代码的运行 加载此模块需要这么长时间,这正常吗 PS:我使用的是OpenPYXL3.0.2,我不知道为什么它这么慢,但我知道它就是这么慢。您可以尝试使用代码探查器(如

我用PythonTkinter编写了一个GUI程序,注意到它的启动速度非常慢,窗口显示需要8秒钟!我检查了代码,最后发现是因为一个名为openpyxl的Excel读/写模块。当我注释掉这一行时:
importopenpyxl
。GUI窗口立即显示

我还尝试在python提示符下运行代码
import-openpyxl
,几乎花了3秒钟完成了代码的运行

加载此模块需要这么长时间,这正常吗

PS:我使用的是OpenPYXL3.0.2,我不知道为什么它这么慢,但我知道它就是这么慢。您可以尝试使用代码探查器(如PyCharm中的代码探查器)来找出到底是什么花费了这么长的时间,或者您也可以通过在需要时在运行时导入模块来改善用户体验

采取以下行动:

import openpyxl


... gui stuff


def on_button_clicked():
    openpyxl.do_something()
    ...done
为用户加载以下代码需要很长时间,将其更改为以下代码将极大地提高启动性能并带来更好的用户体验

请注意,在一天结束时,代码仍然需要3秒钟才能加载,但您将代码移动到一个人们不介意它发生的地方,因为如果他们按下一个按钮并显示一个加载程序,他们希望事情需要更长的时间


... gui stuff


def on_button_click():
    ... show a loader or something
    import openpyxl
    openpyxl.do_something()
    ... done

即时进口不是一种禁忌吗?t按此方法,您将在每次单击按钮时导入它。这似乎不是个好主意idea@Kraay89没错,这不是最佳实践,但是您可能会争辩说,为了用户体验,这可能是值得的。如果你真的想变得有趣,你可以编写一个函数,将导入的模块存储到字典中,并检查它们是否已经导入或其他什么,但这确实超出了问题的范围。一旦导入模块,它将位于
sys.modules
,所以再次进口的成本应该是最低的。奇怪的是,进口速度如此之慢;对我来说,在一台使用了10年以上的计算机上,这个模块最坏的导入时间是微秒。(虽然在一台使用了2年的带SSD的笔记本电脑上,时间安排很相似,所以硬件可能并不那么重要)。是的,这很奇怪。我甚至在我的个人电脑上试过,仍然花了很长的时间。