如何对python进行加速

Python017

如何对python进行加速,第1张

对python进行加速的方法:

1、使用哈希表的数据结构

如果在程序中遇到大量搜索操作时,并且数据中没有重复项,则可以使用查找而不是循环。

2、矢量化取代循环

尽量使用基于C构建的Python库,例如Numpy,Scipy和Pandas,并且利用矢量化同时处理来取代程序中编写多次处理数组单个元素的循环,循环可能是程序优化最容易被拿来开刀的地方了。

3、精简代码行数

在编程时,尽量使用一些python的内置函数来精简代码行数,是代码显得简洁凝练,大大提高代码运行效率。

4、使用多进程

一般计算机都是多进程的,那么在执行操作时可以使用Python中的multiproccessing。多进程可在代码中实现并行化。 当您要实例化新进程,访问共享内存时,多进程成本很高,因此如果有大量数据处理时可以考虑使用多进程。

5、使用Cpython

Cython是一个静态编译器,可以为您优化代码。加载cypthonmagic扩展并使用cython标记使用cython编译代码。

6、尽量使用csv替代xlsx

在进行数据处理时, 我需要更长的时间才能将数据加载到excel文件或从excel文件保存数据。 相反,我选择了创建多个csv文件的路径,并创建了一个文件夹来对文件进行分组。

7、使用Numba

它是一个JIT(即时)编译器。 通过装饰器,Numba将带注释的Python和NumPy代码编译为LLVM 。将您的功能分为两部分:

执行计算的函数 - 使用@autojit进行装饰

执行IO的功能

更多Python知识请关注Python视频教程栏目。

import numpy as np

import os

import sys

import multiprocessing as mp

import time

def MCS(input_data, med):

#t1 = time.perf_counter()

left = 0

lp = 0

while True:

lp = lp + 1

data_pool = input_data + left

output_data = med * 0.05 * data_pool / (10000 + med)

output_data = np.where(output_data >data_pool, data_pool, output_data)

left = data_pool - output_data

cri = (input_data - output_data) / input_data * 100

#print(lp, data_pool, output_data, cri)

if cri <= 1:

break

t2 = time.perf_counter()

#print(f'Finished in {t2 - t1} seconds')

if __name__ == "__main__":

pool = mp.Pool(processes=5)

tasks = []

for i in np.linspace(0.4, 0.6, num = 10):

tasks.append([100, i])

t1 = time.perf_counter()

pool.starmap(MCS, tasks)

#pool.apply_async(MCS, args=(100, 0.4))

t2 = time.perf_counter()

#pool.join()

#pool.close()

for i in np.linspace(0.4, 0.6, num = 10):

MCS(100, i)

t3 = time.perf_counter()

print(f'Finished in {t2 - t1} seconds')

print(f'Finished in {t3 - t2} seconds')

原因可能是只运行了一个例子,

如图测试了10个例子,测试结果如下

Finished in 15.062450630997773 seconds

Finished in 73.1936681799998 seconds

并行确实有一定的加速。