加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹤壁站长网 (https://www.0392zz.cn/)- 分布式云、存储数据、视频终端、媒体处理、内容创作!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

python运行加速有什么方法?效果如何?

发布时间:2022-02-19 13:54:47 所属栏目:语言 来源:互联网
导读:python运行加速有什么方法?对于Python运行的慢问题这里就不多说,下面主要给大家来分享一下python运行加速的几种方式,有需要的朋友可以参考,接下来我们一起看看吧。 一、总结 1、使用pypy 2、减少函数化调用 3、减少文件的打开即with的调用,将这一调用放
    python运行加速有什么方法?对于Python运行的慢问题这里就不多说,下面主要给大家来分享一下python运行加速的几种方式,有需要的朋友可以参考,接下来我们一起看看吧。
 
    一、总结
    1、使用pypy
    2、减少函数化调用
    3、减少文件的打开即with的调用,将这一调用放在for循环前面,然后传递至后面需要用到的地方
    4、if函数判断条件多的尽量在前面
    全面加速(pypy)
 
    二、全面加速(pypy)
    将python换为pypy,在纯python代码下,pypy的兼容性就不影响使用了,因为一些纯python的代码常常会用pypy进行一下加速
 
    测试代码,for循环10000000次
 
start = time.time()
for i in range(10000000):
    print(i,end="r")
end = time.time()
print(f"耗费时间{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
    pypy的耗时为:
 
    而python耗时为
 
    大致三倍,但是循环越多估计越快,据说有6倍左右
 
    二、减少文件的打开即with的调用
    原代码的with在调用函数内,即每次调用函数都要打开并关闭文件,造成大量耗时
 
def BMES(word,tag):
    with open(r"J:PyCharm项目学习进行中NLP教程NLP教程数据集词性标注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")
 
#后续在多个if-elif-else中调用
    耗时为
 
    tqdm预估时间在15~25个小时左右跳动
 
    将with放在循环前面
    如
 
    将with的内容作为f_传递进来
 
 
 
    后的耗时为:
 
 
    测试如下:
 
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"耗费时间{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
    耗时结果为:
 
    将文件的打开即with的调用放在外面
 
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"耗费时间{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
    耗时为
 
    结论:快了119倍,而实际加速远远大于这个倍数
 
    三、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")



(编辑:鹤壁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读