Python模塊簡介之threading模塊

1、進程與線程

程序包括進程,進程包括線程。

一個程序,至少包括一個進程,因爲進程是一個執行特定的功能、具有自己獨立的內存資源空間、系統進行資源調度和分配的獨立單位。這樣來說吧,可以把你的程序.py看做一個進程,符合以上的條件,對不對?但是,也可以這樣來看,把你的程序.py看成幾個進程的集合,或許這些進程之間相互獨立,互不干擾,又或許某些進程結束後,另一些進程才能開始,就像某些函數,一個函數必須依賴另一個函數才能執行,那麼這兩個函數就可以看做兩個進程啊。

一個進程,至少包括一個線程。線程的出現是爲了做到計算機的併發處理,一個進程可以包括多個線程,多個線程之間共享同一個進程的內存資源,比如:一個程序F爲一個進程,F中有讀文件函數R1~R5和寫文件函W1~W5,那麼Ri和Wi便可以當做多個線程,比如現在要複製一個文件夾fileA的5個文件file1~file5內容到文件夾fileB中,一般的做法是先複製文件file1,然後file2……,所需時間爲複製5個文件的時間和;其實我們把Wi和Ri當做線程之後,這5個文件的複製便可以同步進行,所需時間爲最大文件的複製時間。

2、threading模塊

截圖如下:


這裏我們介紹類Thread的用法和如何開啓線程和關閉線程:

Thread類有以下幾個方法:

start()#開啓線程的執行

run()#定義線程的功能函數,一旦線程被開啓,功能函數自動開始執行,一般會被子類改寫

join(timout=None)#程序掛起,就是在join()函數後等待線程的執行結束才執行join()函數以後的程序的內容,如果給定了timeout(不爲None),則程序最多掛起時間爲timeout,否則一直等到所有線程結束。

getName()#返回線程的名字

setName(name)#設置線程的名字

isAlive()#線程正在運行返回True,否則返回False

isDaemon()#返回線程的Daemon標誌

setDaemon(daemon)#設置線程的Daemon標誌爲daemon,一定要在start()函數執行前執行

找段程序介紹一下它們的用法:(程序如下)

1 #!/usr/bin/env python   '''這一句是告訴系統Python解釋器在這個位置'''

3 import threading  '''這一句是導入了模塊threading,一般爲了下邊使用方便,寫成:from threading import *  表示導入模塊threading中的所有方法或者變量或者對象。 '''
4 from time import sleep, ctime  '''這一句是導入了模塊time中的sleep()和ctime()兩個函數'''

6 loops = [4,2]  '''指定睡眠時間列表,供函數使用'''

8 def loop(nloop, nsec):  '''定義睡眠函數(循環函數)'''
9 print 'start loop', nloop, 'at:', ctime()  '''ctime()函數返回當前的時間,精確到秒,此爲開始時間'''
10 sleep(nsec)  '''執行睡眠函數'''
11 print 'loop', nloop, 'done at:', ctime() '''此爲結束時間'''
12 
13 def main(): '''定義main函數'''

14 print 'starting at:', ctime() 

15 threads = [] '''建立線程列表'''
16 nloops = range(len(loops)) 
17 
18 for i in nloops:  '''循環建立線程,並且加入線程表threads中去'''
19 t = threading.Thread(target=loop, args=(i, loops[i])) '''這是實例化一個threading.Thread類的對象作爲一個線程,傳入參數‘target=函數的名字’,args爲一個參數列表或元組,其中元素爲函數所需要的參數,args=(函數參數)'''

20
21 threads.append(t) '''將實例加入threads中'''
22 
23 for i in nloops: # start threads 
24 threads[i].start()  '''循環啓動各個對象的stat(),雖然是一個一個啓動,但是在執行的時候是併發的同時的'''
25 
26 for i in nloops: # wait for all 
27 threads[i].join()  '''等待線程結束'''
28 
29 print 'all DONE at:', ctime() '''打印結束時間'''
30 
31 if __name__ == '__main__':  '''這一句告訴解釋器,執行的時候從main()開始
32 main()  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章