python:threading多線程模塊-創建線程


創建線程的兩種方法:

1,直接調用threading.Thread來構造thread對象,Thread的參數如下:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})  

group為None;

target為線程將要執行的功能函數;

name為線程的名字,也可以在對象構造后調用setName()來設定;

args為tuple類型的參數,可以為多個,如果只有一個也的使用tuple的形式傳入,例如(1,);

kwargs為dict類型的參數,也即位命名參數

threading.Thread對象的其他方法:

start(),用來啟動線程;

join(), 等待直到線程結束;

isAlive(),獲取線程狀態

 

setDeamon(), 設置線程為deamon線程,必須在start()調用前調用,默認為非demon。

注意: python的主線程在沒有非deamon線程存在時就會退出。

 

threading.currentthread() , 用來獲得當前的線程;

threading.enumerate() , 用來多的當前存活的所有線程;

 

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
#coding:utf-8
import  threading
def  func1(num):
     for  in  range (num):
         #threading.currentThread()獲取當前線程,getName()獲取線程名字
         print  'I am %s.num:%s'  %  (threading.currentThread().getName(), i)
                       
def  main(thread_num):
     thread_list  =  []  #定義一個線程列表
     for  in  range (thread_num):
         thread_list.append(threading.Thread(target = func1, args  =  ( 3 , )))
     for  in  thread_list:
         #a.setDaemon(True)這個setDaemon默認為False 非守護線程
         #表示主線程等所有子線程結束后,在結束
         #設置為True的話 表示是個守護線程 子線程就會隨着主線程的結束而結束
         #聽說服務監控工具生成的心跳線程 就是用的守護線程
         a.start()
                       
                       
     for  in  thread_list:
         a.join()  #表示等待直到線程運行完畢
                       
main( 3 )
#########運行結果######
>>> I am Thread - 1.num : 0
I am Thread - 1.num : 1
I am Thread - 1.num : 2
I am Thread - 2.num : 0
I am Thread - 2.num : 1
I am Thread - 2.num : 2
I am Thread - 3.num : 0
I am Thread - 3.num : 1
I am Thread - 3.num : 2

 

 

 

2,直接從threading.Thread繼承,然后重寫__init__方法和run方法

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
#coding:utf-8
import  threading
class  MyThread(threading.Thread):  #繼承父類threading.Thread
     def  __init__( self , num ): 
         threading.Thread.__init__( self )
         self .num  =  num
          
     #把要執行的代碼寫到run函數里面 線程在創建后會直接運行run函數 
     def  run( self ):
         for  in  range ( self .num):
             print  'I am %s.num:%s'  %  ( self .getName(), i)
                 
for  in  range ( 3 ):
     =  MyThread( 3 )
     t.start()
     t.join()
##########運行結果#########
>>> I am Thread - 1.num : 0
I am Thread - 1.num : 1
I am Thread - 1.num : 2
I am Thread - 2.num : 0
I am Thread - 2.num : 1
I am Thread - 2.num : 2
I am Thread - 3.num : 0
I am Thread - 3.num : 1
I am Thread - 3.num : 2

 

本文出自 “師父領進門,修行靠個人!” 博客,請務必保留此出處http://zeping.blog.51cto.com/6140112/1258966


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM