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