您的位置:

python执行加速(python多进程加速)

本文目录一览:

如何多线程(多进程)加速while循环(语言-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

并行确实有一定的加速。

用Python 做策略回测,耗时很长,有什么加速办法

1. 在动手优化之前,先profile看看,程序时间都花在哪些地方了:

python -m cProfile -o output.prof your_program

跑完之后,会生成一个output.profile文件。接下来需要对这个文件进行分析,这方面的工具我推荐SnakeViz,神器。安装非常简单,pip install snakeviz 即可。

snakeviz output.prof

运行之后,会打开一个浏览器窗口,好好看看,哪些函数耗时最多,耗时是因为调用次数太多呢,还是因为单次调用耗时长,明确优化重点;

2. 减少重复计算,缓存计算结果。看看 functools.lru_cache。

3. 能用list comprehension的地方,不要用for;能用numpy的地方,不要手写循环,不要用pandas;

4. 看你的回测,40w个tick的话,数据量不算大,应该是直接load到内存里的吧?

5. 还是慢的话,上Numba — Numba,就是安装麻烦一些,使用起来非常方便,速度提高一两个数量级没问题;

6. 如果你用的包PyPy都支持的话,试试pypy;

7. Cython、c module,上面的都没效果的话,这个是最后的候选方案了。

看到几个给 python 做加速的方案

python 性能加速的方法:

选择一个正确的数据结构。

这个说法深有体会。Python中多变的数据结构可以造成很大的差异,使用一个set就可以事半功倍。甚至一个自己定义的数据结构,对于内存,运算速度,处理方式等都有很大的影响。

进行排序

我在项目中也遇到过,几百万的数据URL需要进行鉴别,哪些数据抓取了哪些没有,抓取的部分还有重复。使用if x in y这种格式,则需要o(m*n)的时间复杂度。而两边都对URL进行排序后,则可以使用两个指针轻松搞定。

字符串组合

编写大字符串的时候,不建议使用加号拼接字符串。使用join,%s(py3中使用format方法)等官方的方法效果更好。

循环的使用

如果使用for循环进行简单而大量的操作,不妨试试map()函数,或者python2.0中就已经有的list方法直接生成。或者使用迭代器进行循环的操作。

避免使用点方法

如上,需要使用list.append()方法的时候,这些方法都是需要在每次调用的时候重新确定(原文reevaluated)的,所以可以提前代替,如re.compile()方法。

使用局部变量

可以将一些代码函数化,从而将变量转为局部变量,Python获取局部变量比使用全局变量要快得多。

初始化字典元素

字典的当前使用新技巧包括:使用keyError来定位没有的key,使用get()方法来返回键对应的值。字典中还有collections模块中较多的:defaultdict,OrderedDict类等。

首先在头部写明 import 声明

大量的import会影响Python的性能。虽然随处可以import, 但最好在代码的头部集中写明。

数据的聚合

一次将多个数据聚合起来传递给函数比多次调用函数的开销要小得多。

减少执行语句的数量

Python中有一个定期检查线程是否该运行的函数。这个函数的大量调用会影响性能。最好我们可以设置这个值为较大的数,或者使用少的执行语句而以空间换时间。

Python不是C

移位不一定比加法快。Python是一个高级语言,调用底层不一定快。

使用profile来分析函数的性能

python的性能

我用python执行时间23秒,用pypy执行时间1.54秒,用numba加速为1.5秒,c语言在本机macos上执行时间1.3秒,java运行速度1.45秒(jre8),详细见图片,可见引入jit编译后,性能直逼c语言,而写python比写c容易太多,比java简洁,写代码速度也是非常非常重要。由于历史原因,很多python库用的c语言库,如pandas(pandas的矩阵计算用numpy优化过非常快,可能比手写c语言循环还要快),可以通过设计来分离c语言加速后的python代码和pure python,分别用不同的加速方法,如numba可以单独加速一个函数,把需要大量计算的放在一个函数用numba加速(numbapro支持显卡加速但是商业版的)。

所以只适当设计一下,python在一般计算问题下有这些解决方案下性能不是问题,实在不行,你还可以用boost::python来写个c/c++调用库来解决性能问题。

下面的测试说明,对于性能,原生python比较慢,在windows下python比linux,macos要快,用pypy后相当于java,c#速度,pypy,c#在windows下受益msvc表现较快,,go语言速度表现比较稳定,c语言理论上是最快,但受环境和编译器影响较大。对c#,java可能在GC垃圾回收时会表现不稳定,因为在oop中有大量计算后可能要回收垃圾内存对象,这个没有用到oop,只是纯计算,理论上还是c/c++语言最快。

python和java比,运行速度比java慢,java强大于改进n次的强大jre,但python在很多领域能调用很多现成的开源库,在数据分析中有优势,pyhton的代码比java要简洁,容易入门和使用。在优化的计算库帮助下,如numpy numba,pandas,scikit-learn,python的实际问题运算性能并不低于java。java主要是框架太多,相对复杂,java主要用于业务程序开发,符合软件工程理论,可伸缩性强,强类型有利于对程序的静态检查分析。java随着安卓,hadoop,spark的兴起,加入java语言的公司很多,性能也可以通过优化解决很多问题。很多服务器如ubuntu server,centos都默认支持python,而java虚拟机需要安装配置,python的安装使用也相对简单。python的库有开箱即用感,很多业务领域,你可能还在用oop写代码,考虑设计模式,用锄头挖沟时,而python调用挖掘机api已经炒菜完工开饭了,缺点是油耗比较大。

加速Python程序运行

python是一门简洁、高效的语言,这也是它的设计理念!下面我们来看一下如何加速我们的python。

以下举例说明

一、分析代码运行时间

第1式:测算代码运行时间

平凡方法

   

快捷方法(jupyter环境)

第2式:测算代码多次运行平均时间

平凡方法

快捷方法(jupyter环境)

第3式:按调用函数分析代码运行时间

平凡方法

快捷方法(jupyter环境)

怎样加快python官网上应用的下载速度?

Python是一个很酷的语言,因为你可以在很短的时间内利用很少的代码做很多事情。不仅如此,它还能轻松地支持多任务,比如多进程等。Python批评者有时会说Python执行缓慢。本文将尝试介绍6个技巧,可加速你的Python应用程序。

1.让关键代码依赖于外部包

虽然Python让许多编程任务变得容易,但它可能并不总能为紧急的任务提供最佳性能。你可以为紧急的任务使用C、C++或机器语言编写的外部包,这样可以提高应用程序的性能。这些包都是不能跨平台的,这意味着你需要根据你正在使用的平台,寻找合适的包。简而言之,这个方案放弃了一些应用程序的可移植性,以换取只有在特定主机上直接编程才能获得的程序性能。这里有一些你应该考虑加入到你的“性能兵工厂”的包: