继承threading.Thread,并重写run方法实现多线程,这里用到logging日志模块是为了输出好看一些,直接print的话会几行叠在一起,不好看:
#!/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去控制线程数:
#!/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方法,满足日常工作。
推荐阅读: