一、概念介紹
Thread 是threading模塊中最重要的類之一,可以使用它來創建線程。有兩種方式來創建線程:一種是通過繼承Thread類,重寫它的run方法;另一種是創建一個threading.Thread對象,在它的初始化函數(__init__)中將可調用對象作為參數傳入.
Thread模塊是比較底層的模塊,Threading模塊是對Thread做了一些包裝的,可以更加方便的被使用。
另外在工作時,有時需要讓多條命令并發的執行, 而不是順序執行。
二、代碼樣例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#!/usr/bin/python # encoding=utf-8 # Filename: thread-extends-class.py # 直接從Thread繼承,創建一個新的class,把線程執行的代碼放到這個新的 class里 import threading import time class ThreadImpl(threading.Thread): def __init__( self , num): threading.Thread.__init__( self ) self ._num = num def run( self ): global total, mutex # 打印線程名 print threading.currentThread().getName() for x in xrange ( 0 , int ( self ._num)): # 取得鎖 mutex.acquire() total = total + 1 # 釋放鎖 mutex.release() if __name__ = = '__main__' : #定義全局變量 global total, mutex total = 0 # 創建鎖 mutex = threading.Lock() #定義線程池 threads = [] # 創建線程對象 for x in xrange ( 0 , 40 ): threads.append(ThreadImpl( 100 )) # 啟動線程 for t in threads: t.start() # 等待子線程結束 for t in threads: t.join() # 打印執行結果 print total |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#!/usr/bin/python # encoding=utf-8 # Filename: thread-function.py # 創建線程要執行的函數,把這個函數傳遞進Thread對象里,讓它來執行 import threading import time def threadFunc(num): global total, mutex # 打印線程名 print threading.currentThread().getName() for x in xrange ( 0 , int (num)): # 取得鎖 mutex.acquire() total = total + 1 # 釋放鎖 mutex.release() def main(num): #定義全局變量 global total, mutex total = 0 # 創建鎖 mutex = threading.Lock() #定義線程池 threads = [] # 先創建線程對象 for x in xrange ( 0 , num): threads.append(threading.Thread(target = threadFunc, args = ( 100 ,))) # 啟動所有線程 for t in threads: t.start() # 主線程中等待所有子線程退出 for t in threads: t.join() # 打印執行結果 print total if __name__ = = '__main__' : # 創建40個線程 main( 40 ) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#!/usr/bin/python # encoding=utf-8 # Filename: put_files_hdfs.py # 讓多條命令并發執行,如讓多條scp,ftp,hdfs上傳命令并發執行,提高程序運行效率 import datetime import os import threading def execCmd(cmd): try : print "命令%s開始運行%s" % (cmd,datetime.datetime.now()) os.system(cmd) print "命令%s結束運行%s" % (cmd,datetime.datetime.now()) except Exception, e: print '%s\t 運行失敗,失敗原因\r\n%s' % (cmd,e) if __name__ = = '__main__' : # 需要執行的命令列表 cmds = [ 'ls /root' , 'pwd' ,] #線程池 threads = [] print "程序開始運行%s" % datetime.datetime.now() for cmd in cmds: th = threading.Thread(target = execCmd, args = (cmd,)) th.start() threads.append(th) # 等待線程運行完畢 for th in threads: th.join() print "程序結束運行%s" % datetime.datetime.now() |
以上就是本文的全部內容,希望對大家學習python程序設計有所幫助。