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

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
继承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方法,满足日常工作。

推荐阅读:

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Python 网站文件及数据库备份脚本 http://www.linuxidc.com/Linux/2012-06/62346.htm

Python文件处理:读取文件 http://www.linuxidc.com/Linux/2013-08/88496.htm

如何发布自定义的Python模块 http://www.linuxidc.com/Linux/2013-08/88495.htm

Python爬虫多线程抓取代理服务器 http://www.linuxidc.com/Linux/2013-07/87289.htm

Python中re(正则表达式)模块详解 http://www.linuxidc.com/Linux/2013-08/88588.htm

Python 的详细介绍:<a title="Python" href="../../Linux/

未经允许不得转载:演道网 » Python继承类的方式实现多线程及控制线程数

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册