溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python運(yùn)行加速的方式有哪些

發(fā)布時(shí)間:2021-07-13 13:48:39 來(lái)源:億速云 閱讀:241 作者:chen 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“python運(yùn)行加速的方式有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“python運(yùn)行加速的方式有哪些”吧!

目錄
  • 一、總結(jié)

  • 二、全面加速(pypy)

  • 二、減少文件的打開(kāi)即with的調(diào)用

  • 三、if判斷靠前

一、總結(jié)

1、使用pypy
2、減少函數(shù)化調(diào)用
3、減少文件的打開(kāi)即with的調(diào)用,將這一調(diào)用放在for循環(huán)前面,然后傳遞至后面需要用到的地方
4、if函數(shù)判斷條件多的盡量在前面
全面加速(pypy)

二、全面加速(pypy)

將python換為pypy,在純python代碼下,pypy的兼容性就不影響使用了,因?yàn)橐恍┘僷ython的代碼常常會(huì)用pypy進(jìn)行一下加速

測(cè)試代碼,for循環(huán)10000000次

start = time.time()
for i in range(10000000):
    print(i,end="\r")
end = time.time()
print(f"耗費(fèi)時(shí)間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")

pypy的耗時(shí)為:

python運(yùn)行加速的方式有哪些

而python耗時(shí)為

python運(yùn)行加速的方式有哪些

大致三倍,但是循環(huán)越多估計(jì)越快,據(jù)說(shuō)有6倍左右

二、減少文件的打開(kāi)即with的調(diào)用

原代碼的with在調(diào)用函數(shù)內(nèi),即每次調(diào)用函數(shù)都要打開(kāi)并關(guān)閉文件,造成大量耗時(shí)

def BMES(word,tag):
    with open(r"J:\PyCharm項(xiàng)目\學(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ù)在多個(gè)if-elif-else中調(diào)用

耗時(shí)為

python運(yùn)行加速的方式有哪些

tqdm預(yù)估時(shí)間在15~25個(gè)小時(shí)左右跳動(dòng)

將with放在循環(huán)前面


python運(yùn)行加速的方式有哪些

將with的內(nèi)容作為f_傳遞進(jìn)來(lái)

python運(yùn)行加速的方式有哪些

后的耗時(shí)為:

python運(yùn)行加速的方式有哪些

測(cè)試如下:

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)時(shí)間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")

耗時(shí)結(jié)果為:

python運(yùn)行加速的方式有哪些

將文件的打開(kāi)即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)時(shí)間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")

耗時(shí)為

python運(yùn)行加速的方式有哪些

結(jié)論:快了119倍,而實(shí)際加速遠(yuǎn)遠(yuǎn)大于這個(gè)倍數(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")

滿(mǎn)足條件的可以先跳出判斷

到此,相信大家對(duì)“python運(yùn)行加速的方式有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI