keep code ****** 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 等等
SQL 提高效能
參考部落格 非常感謝博主分享。1.set nocount on 關閉行基數資訊,減少網路通訊,提高程式效能。2.count 1 count 2 count name count 前三種效果一樣,count 找出最短的列,所以建議用count 1 效率高。3.with nolock 大量的查詢,會導致...
高效能mysql學習筆記
此文已由作者朱笑天授權網易雲社群發布。筆者在工作之餘閱讀了一下高效能mysql,以下的內容對mysql的介紹以及書中涉及一些概念的總結歸納。1.mysql架構 1.最上層負責鏈結處理 認證授權 安全等 2.中間一層涵蓋了mysql的大多數核心功能。包括查詢解析 分析 優化 快取 內建函式 所有的誇儲...
開啟opcache提高效能
在開啟opcache之前,我們先介紹一下編譯與解釋 編譯器是把源程式的每一條語句都編譯成機器語言,並儲存成二進位制檔案,這樣執行時計算機可以直接以機器語言來執行此程式,速度很快 而直譯器則是只在執行程式時,才一條一條的解釋成機器語言給計算機來執行,所以執行速度是不如編譯後的程式執行的快的。解釋型語言...