继承threading.Thread,并重写run方法实现多线程,这里用到logging日志模块是为了输出好看一些,直接print的话会几行叠在一起,不好看:
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
|
#!/usr/bin/python
#coding:utf-8
import
threading
import
datetime
import
logging
import
time
logging.basicConfig(level
=
logging.DEBUG,
format
=
'(%(threadName)-10s) %(message)s'
,)
list
=
[
'192.168.1.1'
,
'192.168.1.2'
]
class
Test(threading.Thread):
def
__init__(
self
,ip):
threading.Thread.__init__(
self
)
self
.ip
=
ip
def
run(
self
):
logging.debug(
"%s start!"
%
self
.ip)
time.sleep(
5
)
logging.debug(
'%s Done!'
%
self
.ip)
if
__name__
=
=
"__main__"
:
#启动线程
for
ip
in
list
:
t
=
Test(ip)
t.start()
#等待所有线程结束
for
t
in
threading.
enumerate
():
if
t
is
threading.currentThread():
continue
t.join()
logging.debug(
'Done!'
)
|
运行结果:
接着用Semaphore去控制线程数:
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
#coding:utf-8
import
threading
import
datetime
import
logging
import
time
logging.basicConfig(level
=
logging.DEBUG,
format
=
'(%(threadName)-10s) %(message)s'
,)
list
=
[
'192.168.1.1'
,
'192.168.1.2'
]
class
Test(threading.Thread):
def
__init__(
self
,threadingSum, ip):
threading.Thread.__init__(
self
)
self
.ip
=
ip
self
.threadingSum
=
threadingSum
def
run(
self
):
with
self
.threadingSum:
logging.debug(
"%s start!"
%
self
.ip)
time.sleep(
5
)
logging.debug(
'%s Done!'
%
self
.ip)
if
__name__
=
=
"__main__"
:
#设置线程数
threadingSum
=
threading.Semaphore(
1
)
#启动线程
for
ip
in
list
:
t
=
Test(threadingSum,ip)
t.start()
#等待所有线程结束
for
t
in
threading.
enumerate
():
if
t
is
threading.currentThread():
continue
t.join()
logging.debug(
'Done!'
)
|
运行结果:
接下来就根据需要来扩展run方法,满足日常工作。
本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1322247如需转载请自行联系原作者
lihuipeng