- Keep Code Simple Not Data
减少代码,能减少生成的代码,因此能减少执行时间
python是解释执行的,代码量少对性能确实有好处,针对被调用次数高的代码,可以使用一些技巧减少代码行获得性能的提升。有些函数会被调用成千上万次,每次执行的时间从0.005优化到0.0025也是很了不起的。
使用List Comprehensions构造List,快12倍
使用enumerate来获取index,快20%
使用Generator处理循环/序列,节省内存
List Comprehensions节省CPU, Generator节省内存
当数据量提高到100000的时候,Generator版本的cache耗时不到list comprehension版本的一半。
耗时kstones比例情况如下:
cached_genrator:cached_listComprehension:nocached
10:29:41
- 使用multitask并发
使用multitask扩展模块和Generator可以实现简单的并发操作。
特别在涉及到io操作包括数据库操作的时候,python的并发可以提高性能。cpu密集的优化则是python的难点,因为全局锁的存在。
使用itertools迭代
使用defaultdict替代dict
使用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 等等