python中的執行緒使用 threading模組

2021-06-04 15:49:33 字數 2910 閱讀 2361

最近又用到了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...