python運(yùn)行加速的幾種方式
一、總結(jié)
1、使用pypy
2、減少函數(shù)化調(diào)用
3、減少文件的打開即with的調(diào)用,將這一調(diào)用放在for循環(huán)前面,然后傳遞至后面需要用到的地方
4、if函數(shù)判斷條件多的盡量在前面
全面加速(pypy)
二、全面加速(pypy)
將python換為pypy,在純python代碼下,pypy的兼容性就不影響使用了,因為一些純python的代碼常常會用pypy進(jìn)行一下加速
測試代碼,for循環(huán)10000000次
start = time.time() for i in range(10000000): print(i,end="\r") end = time.time() print(f"耗費(fèi)時間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
pypy的耗時為:
而python耗時為
大致三倍,但是循環(huán)越多估計越快,據(jù)說有6倍左右
二、減少文件的打開即with的調(diào)用
原代碼的with在調(diào)用函數(shù)內(nèi),即每次調(diào)用函數(shù)都要打開并關(guān)閉文件,造成大量耗時
def BMES(word,tag): with open(r"J:\PyCharm項目\學(xué)習(xí)進(jìn)行中\(zhòng)NLP教程\NLP教程\數(shù)據(jù)集\詞性標(biāo)注\nature2ner.txt","a+",encoding="utf-8")as f_: if len(word) == 1: """單字""" f_.write(word + " " + f"S-{tag.upper()}" + "\n") else: """多字""" for index, word_ in enumerate(word): if index == 0: f_.write(word_ + " " + f"B-{tag.upper()}" + "\n") elif 0 < index < len(word) - 1: f_.write(word_ + " " + f"M-{tag.upper()}" + "\n") else: f_.write(word_ + " " + f"E-{tag.upper()}" + "\n") #后續(xù)在多個if-elif-else中調(diào)用
耗時為
tqdm預(yù)估時間在15~25個小時左右跳動
將with放在循環(huán)前面
如
將with的內(nèi)容作為f_傳遞進(jìn)來
后的耗時為:
測試如下:
import os, warnings,time,tqdm def txt(word): with open("ceshi.txt","a+",encoding="utf-8")as f: if len(str(word))<=2: word+=100 f.write(str(word)+"\n") elif 2<len(str(word))<=4: word+=200 f.write(str(word)+"\n") else: f.write(str(word) + "\n") if __name__=="__main__": start = time.time() for i in tqdm.tqdm(range(100000)): txt(i) end = time.time() print(f"耗費(fèi)時間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
耗時結(jié)果為:
將文件的打開即with的調(diào)用放在外面
import os, warnings,time,tqdm def txt(f,word): if len(str(word))<=2: word+=100 f.write(str(word)+"\n") elif 2<len(str(word))<=4: word+=200 f.write(str(word)+"\n") else: f.write(str(word) + "\n") if __name__=="__main__": start = time.time() with open("ceshi.txt", "a+", encoding="utf-8")as f: for i in tqdm.tqdm(range(100000)): txt(f,i) end = time.time() print(f"耗費(fèi)時間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
耗時為
結(jié)論:快了119倍,而實際加速遠(yuǎn)遠(yuǎn)大于這個倍數(shù)
三、if判斷靠前
如:
if tag in ["nts", "nto", "ntc", "ntcb", "ntcf", "ntch", "nth", "ntu", "nt"]: BMES(f_,i2, tag="ORG") elif tag in ["nb", "nba", "nbc", "nbp", "nf", "nm", "nmc", "nhm", "nh"]: BMES(f_,i2, tag="OBJ") elif tag in ["nnd", "nnt", "nn"]: BMES(f_,i2, tag="JOB") elif tag in ["nr", "nrf"]: BMES(f_,i2, tag="PER") elif tag in ["t"]: BMES(f_,i2, tag="TIME") elif tag in ["ns", "nsf"]: BMES(f_,i2, tag="LOC") else: for i3 in list(i2): f_.write(i3 + " " + f"O" + "\n")
滿足條件的可以先跳出判斷
到此這篇關(guān)于python運(yùn)行加速的幾種方式的文章就介紹到這了,更多相關(guān)python運(yùn)行加速的幾種方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyCharm的設(shè)置方法和第一個Python程序的建立
今天小編就為大家分享一篇PyCharm的設(shè)置方法和第一個Python程序的建立,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python3.7實現(xiàn)中控考勤機(jī)自動連接
這篇文章主要為大家詳細(xì)介紹了Python3.7實現(xiàn)中控考勤機(jī)自動連接,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08Python使用matplotlib實現(xiàn)的圖像讀取、切割裁剪功能示例
這篇文章主要介紹了Python使用matplotlib實現(xiàn)的圖像讀取、切割裁剪功能,結(jié)合實例形式分析了Python基于matplotlib操作圖片的加載、讀取、坐標(biāo)控制及裁剪相關(guān)操作技巧,需要的朋友可以參考下2018-04-04Python遠(yuǎn)程linux執(zhí)行命令實現(xiàn)
這篇文章主要介紹了Python遠(yuǎn)程linux執(zhí)行命令實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Pycharm安裝并配置jupyter notebook的實現(xiàn)
這篇文章主要介紹了Pycharm安裝并配置jupyter notebook的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Python中DataFrame轉(zhuǎn)列表的最全指南
在Python數(shù)據(jù)分析中,Pandas的DataFrame是最常用的數(shù)據(jù)結(jié)構(gòu)之一,本文將為你詳解5種主流DataFrame轉(zhuǎn)換為列表的方法,大家可以根據(jù)需求進(jìn)行選擇2025-03-03Pytorch學(xué)習(xí)筆記DCGAN極簡入門教程
網(wǎng)上GAN的教程太多了,這邊也談一下自己的理解,本文給大家介紹一下GAN的兩部分組成,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09