新聞中心
我個(gè)人對(duì)Python 線程編程很感興趣,覺得將Python 線程編程與列隊(duì)“連接”起來(lái)時(shí),那么在你就可以在Python中輕松的完成線程編程,以下就是相關(guān)內(nèi)容的介紹,希望你再瀏覽完此文章會(huì)對(duì)你有所收獲。

為江都等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及江都網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站建設(shè)、江都網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
使用 Python 線程編程
通過將線程和隊(duì)列 結(jié)合在一起,可以輕松地在 Python 中完成線程編程。本文將研究同時(shí)使用線程和隊(duì)列,創(chuàng)建一些簡(jiǎn)單但有效的模式,以解決需要并發(fā)處理的問題。
引言
對(duì)于 Python 來(lái)說(shuō),并不缺少并發(fā)選項(xiàng),其標(biāo)準(zhǔn)庫(kù)中包括了對(duì)線程、進(jìn)程和異步 I/O 的支持。在許多情況下,通過創(chuàng)建諸如異步、線程和子進(jìn)程之類的高層模塊,Python 簡(jiǎn)化了各種并發(fā)方法的使用。除了標(biāo)準(zhǔn)庫(kù)之外,還有一些第三方的解決方案,例如 Twisted、Stackless 和進(jìn)程模塊。
本文重點(diǎn)關(guān)注于使用 Python 的線程,并使用了一些實(shí)際的示例進(jìn)行說(shuō)明。雖然有許多很好的聯(lián)機(jī)資源詳細(xì)說(shuō)明了線程 API,但本文嘗試提供一些實(shí)際的示例,以說(shuō)明一些常見的線程使用模式。#t#
全局解釋器鎖 (Global Interpretor Lock) 說(shuō)明 Python 解釋器并不是線程安全的。當(dāng)前線程必須持有全局鎖,以便對(duì) Python 對(duì)象進(jìn)行安全地訪問。因?yàn)橹挥幸粋€(gè)線程可以獲得 Python 對(duì)象/C API,所以解釋器每經(jīng)過 100 個(gè)字節(jié)碼的指令,就有規(guī)律地釋放和重新獲得鎖。解釋器對(duì)線程切換進(jìn)行檢查的頻率可以通過 sys.setcheckinterval() 函數(shù)來(lái)進(jìn)行控制。
此外,還將根據(jù)潛在的阻塞 I/O 操作,釋放和重新獲得鎖。有關(guān)更詳細(xì)的信息,請(qǐng)參見參考資料部分中的 Gil and Threading State 和 Threading the Global Interpreter Lock需要說(shuō)明的是,因?yàn)?GIL,CPU 受限的應(yīng)用程序?qū)o(wú)法從線程的使用中受益。使用 Python 時(shí),建議使用進(jìn)程,或者混合創(chuàng)建進(jìn)程和線程。
首先弄清進(jìn)程和線程之間的區(qū)別,這一點(diǎn)是非常重要的。線程與進(jìn)程的不同之處在于,它們共享狀態(tài)、內(nèi)存和資源。對(duì)于線程來(lái)說(shuō),這個(gè)簡(jiǎn)單的區(qū)別既是它的優(yōu)勢(shì),又是它的缺點(diǎn)。一方面,線程是輕量級(jí)的,并且相互之間易于通信,但另一方面,它們也帶來(lái)了包括死鎖、爭(zhēng)用條件和高復(fù)雜性在內(nèi)的各種問題。幸運(yùn)的是,由于 GIL 和隊(duì)列模塊,與采用其他的語(yǔ)言相比,采用 Python 語(yǔ)言在線程實(shí)現(xiàn)的復(fù)雜性上要低得多。
使用 Python 線程
要繼續(xù)學(xué)習(xí)本文中的內(nèi)容,我假定您已經(jīng)安裝了 Python 2.5 或者更高版本,因?yàn)楸疚闹械脑S多示例都將使用 Python 語(yǔ)言的新特性,而這些特性僅出現(xiàn)于 Python2.5 之后。要開始使用 Python 語(yǔ)言的線程,我們將從簡(jiǎn)單的 "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()
如果運(yùn)行這個(gè)示例,您將得到下面的輸出:
- # 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
以上內(nèi)容就是對(duì)如何使用Python 線程編程的部分介紹。
分享名稱:Python線程編程如何突出語(yǔ)言的新特性
本文地址:http://m.fisionsoft.com.cn/article/dhpjdps.html


咨詢
建站咨詢
