最近又用到了python中的多執行緒程式設計,前段時間使用並學習過,但是由於長時間不用,慢慢就忘記怎麼用了,畢竟對執行緒的使用還不是很熟練,現在總結一下,記錄下來,加深一下學習的印象。
python中關於執行緒,主要有兩個模組thread和threading,其中thread的模組已不建議使用,因為threading模組更高階,管理執行緒的功能更強,對執行緒支援也更強,比如執行緒同步原語較多,而thread模組的執行緒同步原語只有乙個lock鎖。下面還是對這兩種模組分別進行介紹:
1.thread模組
thread模組提供了基本的執行緒同步鎖物件(lock object,也叫原語鎖,簡單鎖,互斥鎖,互斥量,二值訊號量),模組中常用函式如下:
1.start_new_thread(functon,args, kwargs=none) 產生乙個新的執行緒,在新執行緒中用指定的引數和可選的kwargs來呼叫這個函式;
2. allocate_lock() 分配乙個locktype型別的鎖物件
3. exit() 讓執行緒退出;
locktype型別鎖物件方法
1.acquire(wait=none) 嘗試獲取鎖物件
2.locked()如果獲取了鎖物件返回true,否則返回false
3、release()釋放鎖
多執行緒小例子:
#!/usr/bing/env python
import thread
from time import sleep, ctime
def loop0():
print 'start loop 0 at:', ctime()
sleep(4)
print 'end loop 0 at:', ctime()
def loop1():
print 'start loop 1 at:', ctime()
sleep(2)
print 'end loop 1 at:', ctime()
def main():
print 'start at:', ctime()
thread.start_new_thread(loop0, ())
thread.start_new_thread(loop1, ())
sleep(6)
print 'all done at:', ctime()
if __name__ == '__main__':
main()
輸出結果:
start at: tue mar 06 22:44:52 2012
start loop 1 at: tue mar 06 22:44:52 2012
start loop 0 at: tue mar 06 22:44:52 2012
end loop 1 at: tue mar 06 22:44:54 2012
end loop 0 at: tue mar 06 22:44:56 2012
all done at: tue mar 06 22:44:58 2012
輸出結果中可以看出,由於使用了多執行緒,因此總的執行時間減少了,並不是6秒,而是在4秒的時候兩個函式就執行結束了,達到了並行執行(起碼看起來是並行的)。為了防止主線程退出後,導致loop0和loop1執行緒退出,因此在主線程中增加了sleep(6),這樣就導致整個程式的執行時間沒有減少。因此需要使用鎖來進行同步。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import thread
from time import sleep, ctime
loops = [4, 2]
def loop(nloop, nsec, lock):
print 'start loop', nloop , 'at:', ctime()
sleep(nsec)
print 'end loop 0 at:', ctime()
lock.release()
def main():
print 'starting at:', ctime()
locks =
nloops = range(len(loops))
for i in nloops:
lock = thread.allocate_lock()
lock.acquire()
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()
執行結果:
starting at: wed mar 07 16:59:08 2012
start loop 0 at: wed mar 07 16:59:08 2012
start loop 1 at: wed mar 07 16:59:08 2012
end loop 0 at: wed mar 07 16:59:10 2012
end loop 0 at: wed mar 07 16:59:12 2012
all done at: wed mar 07 16:59:12 2012
從結果中可以看出,總的執行時間變為4秒,達到了並行執行。 python 執行緒中join方法的使用
1 作用 讓子執行緒插入主線程,可理解為在在join呼叫處把子執行緒的code move到了主線程,直到被插入的code執行結束,主線程接著下面的繼續 執行 2 觸發條件 手動呼叫或主線程要退出時自動呼叫 3 引數說明 join方法可可傳入引數表示子執行緒加入主線程的執行時間,超出此時間,強制結束子...
python執行緒喚醒 Python中的執行緒
執行緒同步 概念執行緒同步,執行緒間協同,通過某種技術,讓乙個執行緒訪問某些資料時,其他執行緒不能訪問這些資料,直到該執行緒完成對資料的操作.臨界區 critical section 互斥量 mutex 訊號量 semaphore 時間 event event事件 event事件,是執行緒間通訊機制...
python執行緒陣列 python 執行緒使用
執行緒演示指令碼 coding utf 8 import threading from time import ctime,sleep def music func for i in range 2 print i was listening to s.s func,ctime sleep 1 de...