python學習筆記 提高效能

2021-07-25 18:42:48 字數 1603 閱讀 4060

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之前,我們先介紹一下編譯與解釋 編譯器是把源程式的每一條語句都編譯成機器語言,並儲存成二進位制檔案,這樣執行時計算機可以直接以機器語言來執行此程式,速度很快 而直譯器則是只在執行程式時,才一條一條的解釋成機器語言給計算機來執行,所以執行速度是不如編譯後的程式執行的快的。解釋型語言...