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解釋器在這個位置'''
2
3 import threading '''這一句是導入了模塊threading,一般爲了下邊使用方便,寫成:from threading import * 表示導入模塊threading中的所有方法或者變量或者對象。
'''
4 from time import sleep, ctime '''這一句是導入了模塊time中的sleep()和ctime()兩個函數'''
5
6 loops = [4,2] '''指定睡眠時間列表,供函數使用'''
7
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()