您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python运行加速的几种方式

51自学网 2021-10-30 22:25:40
  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,tqdmdef 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,tqdmdef 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")

满足条件的可以先跳出判断

到此这篇关于python运行加速的几种方式的文章就介绍到这了,更多相关python运行加速的几种方式内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python中collections.Counter()的具体使用
Python实现飞机大战项目
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。