python提供兩個模組支援多執行緒程式設計:thread和threading。
thread模組函式
函式描述
start_new_thread(function,args,kwargs=none)
產生乙個新執行緒,在新執行緒中用指定引數和可選的kwargs呼叫function函式
allocate_lock()
分配乙個locktype型別的鎖物件(注意,此時還沒有獲得鎖)
exit()
退出執行緒
locktype型別鎖物件的函式
acquire(wait=none)
嘗試獲取鎖物件
locked()
如果獲得了鎖物件返回true,否則返回false
release()
釋放鎖接下來使用thread模組編寫多執行緒。
#coding: utf-8
import thread
from time import sleep, ctime
def loop0():
print 'loop0 start at:', ctime()
print 'loop0掛起4秒'
sleep(4)
print 'loop0 done at:', ctime()
def loop1():
print 'loop1 start at:', ctime()
print 'loop1掛起2秒'
sleep(2)
print 'loop1 done at:', ctime()
def main():
print 'main thread start!'
thread.start_new_thread(loop0, ())
thread.start_new_thread(loop1, ())
sleep(6) #主線程睡眠等待子執行緒結束
print 'all done at:', ctime()
if __name__ == '__main__':
main()
執行結果:
下面**的執行結果都是這樣,就不給出了。
相信大家都看到注釋,這種方法的缺點就在主線程要睡眠一段時間等待子執行緒全部結束,不然如果結束主線程,那麼子執行緒都會結束。但是子執行緒會執行多長時間一般是很難確定的。
下面我們看第二種方法。
既然不知道子執行緒的執行時間,那麼我們換一種方式,我們採用鎖的方式來控制主線程退出。
用鎖怎麼實現多執行緒呢?對於每乙個子執行緒,我們都給它加鎖,在執行結束後再釋放鎖,這樣主線程的工作就是檢查沒乙個子執行緒的加鎖狀態,如果都已經釋放鎖了,那就表示子執行緒全部執行結束,就可以退出了。
看具體實現**:
#coding: utf-8
import thread
from time import sleep, ctime
loops = [4,2]
def loop(nloop, nsec, lock):
print 'loop', nloop, 'start at:', ctime()
print 'loop %d 掛起%d秒' % (nloop, nsec)
sleep(nsec)
print 'loop', nloop, 'done at:', ctime()
lock.release()
def main():
print 'main thread start!'
locks = #鎖列表
nloops = range(len(loops))
for i in nloops:
lock = thread.allocate_lock()
lock.acquire()
locks.append(lock)
for i in nloops:
thread.start_new_thread(loop, (i, loops[i], locks[i]))
for i in nloops:
while locks[i].locked(): pass #主線程檢查每乙個子執行緒的加鎖狀態
print 'all done at:', ctime()
if __name__ == '__main__':
main()
實際上,我們不建議使用thread模組。首先,更高階別的threading模組更為先進,對執行緒的支援更為完善,而且使用thread模組裡的屬性有可能會與threading出現衝突。其次,低階別的thread模組的同步原語只有乙個,而threading模組則有很多。
還有乙個原因是,使用thread對於你的程序什麼時候應該結束完全沒有控制,當主線程結束時,所有的執行緒都會被強制結束掉,沒有警告也不會有正常的清除工作。但是threading模組能確保重要的子執行緒退出後程序才退出。
不過如果想訪問執行緒的底層結構,那就可能要使用thread模組了。
Python 多執行緒程式設計 一
userrequestthread 負責讀取客戶端輸入,該輸入可能來自 i o 通道,程式將建立多個執行緒,每個客戶端乙個,客戶端的請求將會被放入佇列中 requestprocessor 該執行緒負責從佇列中獲取請求並進行處理,為第3個執行緒提供輸出 replythread 負責向使用者輸出,將結果...
python 多執行緒程式設計(一)
傳統的python單執行緒程式 created on 2012 3 9 author administrator usr bin env python from time import sleep,ctime def loop0 print start loop0 at ctime sleep 4 ...
python 多執行緒程式設計
一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還可以對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義如下 args 元組形式的引...