python進階擴展day22(Python2)

本文目錄一覽:

北大青鳥設計培訓:python編程開發關於程序擴展操作?

隨着互聯網的不斷發展,我們對python編程開發技術的學習和掌握程度也在不斷的提高。

下面我們就通過案例分析來了解和學習一下,關於程序擴展都有哪些操作方法。

必要的概念傳統編程依賴於兩個核心概念:函數和類。

使用這些構建塊就可以構建出無數的應用程序。

但是,當我們將應用程序遷移到分布式環境時,這些概念通常會發生變化。

一方面,OpenMPI、Python多進程和ZeroMQ等工具提供了用於發送和接收消息的低級原語。

這些工具非常強大,但它們提供了不同的抽象,因此要使用它們就必須從頭開始重寫單線程應用程序。

另一方面,我們也有一些特定領域的工具,例如用於模型訓練的TensorFlow、用於數據處理且支持SQL的Spark,以及用於流式處理的Flink。

這些工具提供了更高級別的抽象,如神經網絡、數據集和流。

但是,因為它們與用於串行編程的抽象不同,所以要使用它們也必須從頭開始重寫應用程序。

用於分布式計算的工具Ray佔據了一個獨特的中間地帶。

它並沒有引入新的概念,而是採用了函數和類的概念,並將它們轉換為分布式的任務和actor。

Ray可以在不做出重大修改的情況下對串行應用程序進行並行化。

開始使用Rayray.init()命令將啟動所有相關的Ray進程。

在切換到集群時,這是需要更改的行(我們需要傳入集群地址)。

java課程培訓機構發現這些過程包括:有很多worker進程並行執行Python函數(大概是每個CPU核心對應一個worker)。

用於將“任務”分配給worker(以及其他計算機)的調度程序進程。

任務是Ray調度的工作單元,對應於一個函數調用或方法調用。

Python為什麼能擴展

Python 具有高可擴展性,存在許多使用 C 語言或 Fortran 編寫擴展的方法。必要時,Python 代碼可以直接將這些擴展作為子例程來調用。這部分討論用於構建擴展的一些主要編譯器(絕對不是完整列表)。

相關推薦:《Python基礎教程》

Cython

Cython(不同於 CPython)既是指一種語言,也是指一種編譯器。Cython 語言是添加了 C 語言語法的 Python 語言的超集。Cython 可以在代碼段或完整函數中顯式釋放 GIL。變量和類屬性上的 C 類型聲明以及對 C 函數的調用都使用 C 語法。其餘部分代碼則使用 Python 語法。通過這個混合的 Cython 代碼,Cython 編譯器可生成高效的 C 代碼。任何定期優化的 C/C++ 編譯器都可以編譯此 C 代碼,從而高度優化擴展的運行時代碼,性能接近於原生的 C 代碼性能。

Numba

Numba 是一個動態、即時 (JIT) 且可感知 NumPy 的 Python 編譯器。Numba 使用 LLVM 編譯器基礎架構,生成優化的機器代碼和從 Python 調用代碼的包裝器。與 Cython 不同,編碼使用常規的 Python 語言。Numba 可讀取來自裝飾器中所嵌入注釋的類型信息,並優化代碼。對於使用 NumPy 數據結構的程序,比如數組以及許多數學函數,它可以實現與 C 或 Fortran 語言類似的性能。NumPy 對線性代數和矩陣函數使用硬件加速,利用 LAPACK 和 BLAS 提供額外加速,大大提升了性能,參見 IBM 博客文章C、Julia、Python、Numba 和 Cython 在 LU 因式分解方面的速度比較。

除 CPU 以外,Numba 還能夠使用 GP-GPU 後端。Anaconda, Inc. 是 Python 某個主要發行版的幕後公司,該公司還開發了 Numba 和商業版的 Numba Pro。

Fortran to Python Interface Generator

Fortran to Python Interface Generator (F2Py) 起初為一個獨立的程序包,現在包含在 NumPy 中。F2Py 支持 Python 調用以 Fortran 編寫的數值例程,就好像它們是另一個 Python 模塊一樣。因為 Python 解釋器無法理解 Fortran 源代碼,所以 F2Py 以動態庫文件格式將 Fortran 編譯為本機代碼,這是一種共享對象,包含具有 Python 模塊接口的函數。因此,Python 可以直接將這些函數作為子例程來調用,以原生 Fortran 代碼的速度和性能來執行。

python 可擴展主要體現?

就算你的項目中有大量的Python代碼,你也依舊可以有條不紊地通過將其分離為多個文件或模塊加以組織管理。而且你可以從一個模塊中選取代碼,而從另一個模塊中讀取屬性。更棒的是,對於所有模塊,Python的訪問語法都是相同的。不管這個模塊是Python標準庫中的還是你一分鐘之前創造的,哪怕是你用其他語言寫的擴展都沒問題!藉助這些特點,你會感覺自己根據需要“擴展”了這門語言,而且你已經這麼做了。

代碼中的瓶頸,可能是在性能分析中總排在前面的那些熱門或者一些特彆強調性能的地方,可以作為Python擴展用C重寫。需要重申的是,這些接口和純Python模塊的接口是一模一樣的,乃至代碼和對象的訪問方法也是如出一轍的。唯一不同的是,這些代碼為性能帶來了顯著的提升。自然,這全部取決你的應用程序以及它對資源的需求情況。很多時候,使用編譯型代碼重寫程序的瓶頸部分絕對是益處多多的,因為它能明顯提升整體性能。

程序設計語言中的這種可擴展性使得工程師能夠靈活附加或定製工具,縮短開發周期。雖然像C、C++乃至Java等主流第三代語言(3GL)都擁有該特性,但是這麼容易地使用C編寫擴展確實是Python的優勢。此外,還有像PyRex這樣的工具,允許C和Python混合編程,使編寫擴展更加輕而易舉,因為它會把所有的代碼都轉換成C語言代碼。

因為Python的標準實現是使用C語言完成的(也就是CPython),所以要使用C和C++編寫Python擴展。Python 的Java實現被稱作Jython,要使用Java編寫其擴展。最後,還有IronPython,這是針對.NET或Mono平台的C#實現。你可以使用C#或者VB.Net擴展IronPython.

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/277659.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-19 13:21
下一篇 2024-12-19 13:21

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論