python多執行緒程式設計(一)

2022-09-22 21:15:28 字數 2433 閱讀 9339

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 元組形式的引...