Python异步编程全攻略

Python异步编程全攻略,第1张

队列的数据,是从web应用中添加过来的(上面省略了bottle的代码),开了一个进程,不断从queue中读取数据,并进行处理(省略了处理过程)。

逻辑是没错的,但是在实际测试的时候,发现一个问题。

Queueget()函数是个默认阻塞的函数,如果队列为空,会一直等待,类似于socketrecv。在测试的时候,程序一直卡在这里,也就是说read()函数并没有读到队列中的数据。

既然存有上千万个数据,为什么不使用数据库呢?

使用小型的sqlite数据库,加上适当的索引、筛选,肯定能大大提高数据处理速度。

python也自身带有处理sqlite数据库的模块,极其方便。

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

少用for,尽量用numpy/pandas的向量化方法。

少用自己写的python方法,先看看numpy /pandas是不是已有现成的功能。

有几个numpy 的加速包,比如numexpr

安装Intel MKL

最后,可以讲关键部分用c/c++实现。

如果无法避开python的for,建议使用Numba来提速,理想情况下可以达到和numpy向量化差不多的速度。

使用timeit模块,先介绍下:

timeit 模块

timeit 模块定义了接受两个参数的 Timer 类。两个参数都是字符串。 第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。

一旦有了 Timer 对象,最简单的事就是调用 timeit(),它接受一个参数为每个测试中调用被计时语句的次数,默认为一百万次;返回所耗费的秒数。

Timer 对象的另一个主要方法是 repeat(), 它接受两个可选参数。 第一个参数是重复整个测试的次数,第二个参数是每个测试中调用被计时语句的次数。 两个参数都是可选的,它们的默认值分别是 3 和 1000000。 repeat() 方法返回以秒记录的每个测试循环的耗时列表。Python 有一个方便的 min 函数可以把输入的列表返回成最小值,如: min(trepeat(3, 1000000))

你可以在命令行使用 timeit 模块来测试一个已存在的 Python 程序,而不需要修改代码。

再给你个例子,你就知道怎么做了。

# -- coding: utf-8 --

#!/bin/env python

def test1():

    n=0

    for i in range(101):

        n+=i

    return n

def test2():

    return sum(range(101))

def test3():

    return sum(x for x in range(101))

if __name__=='__main__':

    from timeit import Timer

    t1=Timer("test1()","from __main__ import test1")

    t2=Timer("test2()","from __main__ import test2")

    t3=Timer("test3()","from __main__ import test3")

    print t1timeit(1000000)

    print t2timeit(1000000)

    print t3timeit(1000000)

    print t1repeat(3,1000000)

    print t2repeat(3,1000000)

    print t3repeat(3,1000000)

以上就是关于Python异步编程全攻略全部的内容,包括:Python异步编程全攻略、一篇文章带你深度解析Python线程和进程、python多进程队列耗时多吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9401198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存