Python继承类的方式实现多线程及控制线程数

2014-11-24 02:29:31 · 作者: · 浏览: 3

继承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!')


运行结果:


Python继承类的方式实现多线程及控制线程数


接着用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方法,满足日常工作。


推荐阅读: