成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

時間管理很重要:Python代碼的優化之道

開發 后端
時間管理可是一門大學問,如何在有限的時間更快地運行代碼,并且擁有更優秀的性能,是我們應該去思考的事情。畢竟,成為偉大程序員之路就是要不斷超越自己,尋找最優解。本文就將給大家提供一些時間管理的小tips。

時間管理可是一門大學問,如何在有限的時間更快地運行代碼,并且擁有更優秀的性能,是我們應該去思考的事情。畢竟,成為偉大程序員之路就是要不斷超越自己,尋找最優解。本文就將給大家提供一些時間管理的小tips。

[[324798]]

1. 優化代碼和算法

首先,要仔細閱讀你的代碼和算法。通過執行更優算法或添加緩存可以解決很多速度問題。具體的準則能寫整本書,但要遵循的一些通用準則是:

  • 測試,不要猜測。測試代碼哪些部分的運行耗費最長時間,首先關注這些部分。
  • 減少內存使用量。通常情況下,請嘗試減少內存使用量。例如:逐行分析一個大型文件,而不先將其存儲到內存中。
  • 執行緩存。如果你從磁盤,網絡和數據庫中執行許多重復的搜索,那么執行緩存可能是一個很大的優化。
  • 盡可能減少代碼中的迭代次數,尤其減少迭代內部操作的次數。
  • 避免(深度)遞歸。對Python解釋器而言,這需要大量內存和內務處理,改用生成器和迭代等。
  • 重用對象,而不是在每次迭代中創建新對象。Python必須清理已經創建的每個對象才能釋放內存。這被稱作垃圾回收。許多未使用對象的垃圾回收過程會大大降低軟件速度。
  • 不要這樣做。你真的需要執行該操作嗎?它可以被放在之后完成嗎?或是該操作可被一次完成,并可以存儲其結果而不進行一遍又一遍地計算?

2. 使用PyPy

你可能正在使用Python的參考實現——CPython,它之所以被稱作CPython,是因為它由C語言編寫而成。很多人都在用它。

但如果確定自己的代碼為計算密集型,PyPy會是一個更好的選擇。它有可能是一種快速解決方案,且無需更改單行代碼。

PyPy聲稱:它比CPython平均快4.4倍。它通過使用一種叫作即時編譯(JIT)的技術加快代碼執行速度,其他的JIT還包括Java和.NET框架。而CPython使用解釋器執行代碼,盡管這提供了很大程度的靈活性,速度卻非常慢。

使用JIT,可以在運行程序的同時編譯代碼。它結合了提前編譯(由C和C ++等語言使用)的速度優勢和解釋器的靈活性。此外,JIT編譯器還可以在代碼運行時繼續將其優化。代碼運行時間越長,就越優化。

PyPy在近幾年里發展很快,通常可以被用作Python 2和3的直接替代。它也可以與Pipenv等工具完美配合使用。

3. 使用Asyncio

Asyncio是Python中一個相對較新的核心庫。它與線程解決了相同的問題:即加速了I/O密集型軟件系統,但Asyncio實現方式不同。

筆者其實并不喜歡在Python中使用asyncio。Asyncio相當復雜,特別是對于初學者。而且由于asyncio庫在過去的幾年中發展了很多,網絡上的教程和示例代碼通常已經過時。

但這并不意味著它沒有用。這是一種強大的范例,可用于許多高性能應用程序。

4. 使用多線程

多數軟件系統為I/O密集型,而非計算密集型:

  • I/O密集型 —軟件系統通常在等待輸入/輸出操作完成。從網絡或慢速存儲器中獲取數據時通常是這種情況。
  • 計算密集型 —軟件系統使CPU(中央處理器)達到極限。它使用CPU的所有功能來生成所需的結果。

在從網絡或磁盤中等待回答時,可以使用多個線程維持其他部分的運行。

線程是獨立的執行序列。默認情況下,Python程序具有一個主線程。但可以創建更多線程,并讓Python在不同線程之間轉換。這種轉換發生非常快,顯得似乎在同時并排運行。

時間管理很重要:Python代碼的優化之道

線程是獨立的執行序列,共享相同的存儲

不同于其他語言,Python多線程不能同時運行,而是輪流運行,這主要是因為它的全局解釋器鎖(GIL)的機制。

可見,多線程將對I / O密集型軟件系統產生巨大影響,但對計算密集型軟件系統而言用途甚微。

為何會這樣?很簡單。當一個線程等待來自網絡的回答時,其他線程能夠繼續運行。如果執行大量網絡請求,使用多線程會大有不同。但如果多線程正在執行大量計算,則它們只是等候自己的輪次再繼續執行。線程只會引入更多的開銷。

時間管理很重要:Python代碼的優化之道

圖源:fadeevab

5. 同時使用更多處理器

如果軟件系統為計算密集型,則通常可以通過同時使用更多處理器的方式來重寫代碼。這樣,就可以線性擴展執行速度。

這被稱做并行性。并非所有算法都可以并行運行。例如,簡單地并行化遞歸算法是不可能的。但是幾乎總會有一種替代算法可以很好地進行并行工作。

有兩種使用更多處理器的方式:

  • 在同一臺計算機上使用多個處理器和/或內核。在Python中,這可以通過使用多處理庫來完成。
  • 用計算機網絡來使用分布在多臺機器上的處理器。我們稱其為分布式計算。

不同于線程庫,多處理庫繞過了Python全局解釋器鎖。它實際上是通過生成多個Python實例來實現的。因此,使用多線程在一個Python進程中輪流執行,你將擁有多個Python處理器來同時運行代碼。

時間管理很重要:Python代碼的優化之道

可視化多處理

多處理庫又與線程庫十分相似。那為什么還要考慮線程化?沒錯,線程處理“更輕便”。它只需要一個正在運行的Python解釋器,所需的內存更少,生成新進程也有其開銷。因此,如果代碼為I/O密集型,使用線程可能足夠了。

使軟件系統并行工作后,將分布式計算與諸如Hadoop之類的功能結合使用僅需一小步。通過利用云計算平臺,目前可以相對輕松地加快運行速度。例如,可以在云中處理龐大的數據集,并在本地使用結果。使用混合操作方式,可以節省一些現金,要知道,云平臺的計算功能可是非常昂貴的。

希望以上這些小技巧能夠幫你擁有更快更強的代碼。

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2011-06-16 18:01:48

網站優化SEO

2015-10-08 09:13:24

2015-10-19 09:36:27

2020-03-30 17:44:32

安全 數據物聯網

2022-08-31 12:15:09

JavaScript代碼優化

2020-07-07 11:01:04

Linux工具命令

2021-02-14 13:38:17

Python開發函數

2023-02-23 09:02:40

CIO領域管理

2011-06-21 16:58:09

外鏈

2021-01-28 23:35:37

Python開發數據

2013-10-11 14:18:54

2013-10-11 13:31:10

2021-03-18 13:00:51

JupyterPython編程語言

2012-07-31 09:55:50

時間管理管理

2013-03-14 17:17:34

2013-11-28 13:39:29

東軟創新解決方案

2010-05-20 17:09:14

2019-09-18 11:54:05

2023-02-15 08:00:00

2022-01-13 13:24:16

工具底層邏輯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩成人免费在线视频 | 日本三级全黄三级三级三级口周 | 久久av网站 | 一区二区三区在线免费观看 | 国产精品一区二区欧美黑人喷潮水 | 久久综合av | 国产精品美女久久久久久免费 | 久久精品综合网 | 国产激情视频在线免费观看 | 色伊人 | 国产欧美日韩综合精品一 | 在线观看中文视频 | 亚洲成人99| 一区二区三区四区在线播放 | 国产日日操| 国产精品免费一区二区三区四区 | 欧美精品第一页 | 久久精品91久久久久久再现 | 国产成人精品一区 | 精品久久久一区 | 成人精品国产免费网站 | 久久久久久国产精品免费免费 | 中文字幕成人av | 日韩一区二区三区视频 | 一区二区三区亚洲视频 | 青青久草 | 久久91| www.887色视频免费 | 亚洲第一色站 | 国产精品视频一区二区三区不卡 | 亚洲一区二区三区免费观看 | 国产亚洲一区二区三区 | 欧美一级片在线观看 | 久久久久久国产精品免费免费男同 | 99欧美精品| 午夜影视大全 | 日韩视频一区二区三区 | 久久久久久久av | 欧美日韩不卡 | 国产最新精品视频 | 我要看免费一级毛片 |