国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python中的線程進行網絡編程的入門教程

2020-02-23 00:44:31
字體:
來源:轉載
供稿:網友

引言

對于 Python 來說,并不缺少并發選項,其標準庫中包括了對線程、進程和異步 I/O 的支持。在許多情況下,通過創建諸如異步、線程和子進程之類的高層模塊,Python 簡化了各種并發方法的使用。除了標準庫之外,還有一些第三方的解決方案,例如 Twisted、Stackless 和進程模塊。本文重點關注于使用 Python 的線程,并使用了一些實際的示例進行說明。雖然有許多很好的聯機資源詳細說明了線程 API,但本文嘗試提供一些實際的示例,以說明一些常見的線程使用模式。

全局解釋器鎖 (Global Interpretor Lock) 說明 Python 解釋器并不是線程安全的。當前線程必須持有全局鎖,以便對 Python 對象進行安全地訪問。因為只有一個線程可以獲得 Python 對象/C API,所以解釋器每經過 100 個字節碼的指令,就有規律地釋放和重新獲得鎖。解釋器對線程切換進行檢查的頻率可以通過 sys.setcheckinterval() 函數來進行控制。

此外,還將根據潛在的阻塞 I/O 操作,釋放和重新獲得鎖。有關更詳細的信息,請參見參考資料部分中的 Gil and Threading State 和 Threading the Global Interpreter Lock。

需要說明的是,因為 GIL,CPU 受限的應用程序將無法從線程的使用中受益。使用 Python 時,建議使用進程,或者混合創建進程和線程。

首先弄清進程和線程之間的區別,這一點是非常重要的。線程與進程的不同之處在于,它們共享狀態、內存和資源。對于線程來說,這個簡單的區別既是它的優勢,又是它的缺點。一方面,線程是輕量級的,并且相互之間易于通信,但另一方面,它們也帶來了包括死鎖、爭用條件和高復雜性在內的各種問題。幸運的是,由于 GIL 和隊列模塊,與采用其他的語言相比,采用 Python 語言在線程實現的復雜性上要低得多。
使用 Python 線程

要繼續學習本文中的內容,我假定您已經安裝了 Python 2.5 或者更高版本,因為本文中的許多示例都將使用 Python 語言的新特性,而這些特性僅出現于 Python2.5 之后。要開始使用 Python 語言的線程,我們將從簡單的 "Hello World" 示例開始:
hello_threads_example

    import threading    import datetime        class ThreadClass(threading.Thread):     def run(self):      now = datetime.datetime.now()      print "%s says Hello World at time: %s" %       (self.getName(), now)        for i in range(2):     t = ThreadClass()     t.start()

如果運行這個示例,您將得到下面的輸出:

   # python hello_threads.py    Thread-1 says Hello World at time: 2008-05-13 13:22:50.252069   Thread-2 says Hello World at time: 2008-05-13 13:22:50.252576

仔細觀察輸出結果,您可以看到從兩個線程都輸出了 Hello World 語句,并都帶有日期戳。如果分析實際的代碼,那么將發現其中包含兩個導入語句;一個語句導入了日期時間模塊,另一個語句導入線程模塊。類 ThreadClass 繼承自 threading.Thread,也正因為如此,您需要定義一個 run 方法,以此執行您在該線程中要運行的代碼。在這個 run 方法中唯一要注意的是,self.getName() 是一個用于確定該線程名稱的方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淳化县| 文山县| 牙克石市| 泰来县| 吴旗县| 建湖县| 长沙县| 海宁市| 华安县| 绥阳县| 无极县| 南通市| 确山县| 荆门市| 赤壁市| 松阳县| 宿松县| 逊克县| 马边| 卓资县| 会泽县| 淮阳县| 育儿| 松潘县| 临沭县| 固原市| 万安县| 黔西县| 天峻县| 清水河县| 洞头县| 金坛市| 沧源| 深泽县| 修文县| 微山县| 永德县| 应用必备| 利川市| 文登市| 瑞安市|