python 桌面应用 启动缓慢_如何加快Python 应用的启动时间
我聽說pipenv9.0.2已經(jīng)發(fā)布,啟動時(shí)間有了很大的改進(jìn)。
我很快就試了一下,但我覺得并不快。所以我用Python3.7的新特性來研究它。
在本文中,我將介紹該特性以及如何使用它。
啟動時(shí)間≒導(dǎo)入時(shí)間
例如,pipenv -h 的執(zhí)行時(shí)間比顯示幫助消息的時(shí)間長得多。
一般來說,當(dāng)應(yīng)用程序啟動時(shí),會有一些啟動過程,比如加載環(huán)境變量或配置文件。
對于Python應(yīng)用程序,導(dǎo)入模塊占用了大部分啟動時(shí)間。例如,pipenv --version 花費(fèi)了大約800ms,而import pipenv 花費(fèi)了700ms。
顯示模塊的導(dǎo)入時(shí)間
Python 3.7有新的特性來顯示導(dǎo)入模塊的時(shí)間。
這個(gè)特性是通過 -X importtime 選項(xiàng)或 PYTHONPROFILEIMPORTTIM 環(huán)境變量來啟用的。
例如,您可以利用以下命令來測試pipenv的導(dǎo)入時(shí)間:
或
這里是一個(gè)pipenv --version輸出結(jié)果的例子 。
研究導(dǎo)入時(shí)間
在輸出的最后面,你會看到這些行:
在最后一行,579479表示 import pipenv 需要579479us。
在導(dǎo)入pipenv的同時(shí),還導(dǎo)入了許多其他模塊。從上面的示例中,您可以看到 pipenv 導(dǎo)入了pipenv.cli。子導(dǎo)入以2個(gè)空格縮進(jìn)。
再看最后一行。507表示運(yùn)行pipenv模塊時(shí)只需要507us。579479-507=578972us用于子導(dǎo)入。
找出緩慢的部分
我們來從輸出中找到緩慢子樹。我選取了幾行。
pkg_resources
如您所見,導(dǎo)入pkg_resources 很緩慢。
但令人驚訝的是,pkg_resources沒有進(jìn)行縮進(jìn);它不是pipenv的子導(dǎo)入。
這意味著pkg_resources是由pipenv腳本而不是模塊導(dǎo)入的。
壞消息: 導(dǎo)入pkg_resources很慢。這是一個(gè)已知的問題,在不破壞向后兼容性的情況下很難修復(fù)。
好消息: 您可以避免導(dǎo)入pkg_resources!
在安裝了wheel之后,pip會對它進(jìn)行構(gòu)建并從構(gòu)建包進(jìn)行安裝。
從wheel (.whl)和源碼包(.tar.gz)安裝是不同的過程。
從wheel安裝時(shí),腳本中不使用pkg_resources:
IPython
看下面的部分.
pipenv導(dǎo)入dotenv, dotenv再導(dǎo)入 dotenv.ipython,它再導(dǎo)入IPython。
這就是為什么pipenv在我的環(huán)境中開始很慢; 我已經(jīng)安裝了IPython。
但是為什么要導(dǎo)入IPython呢?我閱讀了dotenv源碼,發(fā)現(xiàn)它是用于IPython擴(kuò)展的。
當(dāng)然,pipenv和許多dotenv用戶并不使用IPython擴(kuò)展。
我向dotenv提交了一個(gè)推送請求,建議dotenv根據(jù)需要導(dǎo)入IPython。
由于pipenv有自己的dotenv副本,所以我向pipenv提交了完全刪除dotenv.ipython的推送請求。
結(jié)論
我可以將 pipenv--version 的時(shí)間從800ms減少到500ms。
導(dǎo)入時(shí)間分析是研究和優(yōu)化應(yīng)用程序啟動時(shí)間的好方法。
總結(jié)
以上是生活随笔為你收集整理的python 桌面应用 启动缓慢_如何加快Python 应用的启动时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cass展点不在原位置_cass展点之步
- 下一篇: python爬虫与django_请问dj