python学习笔记-提高性能

  1. Keep Code Simple Not Data

减少代码,能减少生成的代码,因此能减少执行时间

python是解释执行的,代码量少对性能确实有好处,针对被调用次数高的代码,可以使用一些技巧减少代码行获得性能的提升。有些函数会被调用成千上万次,每次执行的时间从0.005优化到0.0025也是很了不起的。

  1. 使用List Comprehensions构造List,快12倍

  2. 使用enumerate来获取index,快20%

  3. 使用Generator处理循环/序列,节省内存

List Comprehensions节省CPU, Generator节省内存

当数据量提高到100000的时候,Generator版本的cache耗时不到list comprehension版本的一半。

耗时kstones比例情况如下:

cached_genrator:cached_listComprehension:nocached

10:29:41

  1. 使用multitask并发

使用multitask扩展模块和Generator可以实现简单的并发操作。

特别在涉及到io操作包括数据库操作的时候,python的并发可以提高性能。cpu密集的优化则是python的难点,因为全局锁的存在。

  1. 使用itertools迭代

  2. 使用defaultdict替代dict

  3. 使用deque替代list或者Queue.LifoQueue

9.使用gevent/eventlet协程库优化io密集任务

10.基于事件处理的异步方式

11.使用成熟的分布式任务队列Celery

Celery - 分布式任务队列

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。

它是一个专注于实时处理的任务队列,同时也支持任务调度

消息中间件

Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ

任务执行单元

Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

任务结果存储

Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache

另外, Celery还支持不同的并发和序列化的手段

并发

   Prefork, Eventlet, gevent, threads/single threaded

序列化

   pickle, json, yaml, msgpack. zlib, bzip2 compression, Cryptographic message signing 等等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值