加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Python继承类的方式达成多线程及控制线程数

发布时间:2021-12-13 11:08:36 所属栏目:教程 来源:互联网
导读:继承threading.Thread,并重写run方法实现多线程,这里用到logging日志模块是为了输出好看一些,直接print的话会几行叠在一起,不好看: #!/usr/bin/Python #coding:utf-8 import threading import datetime import logging import time logging.basicConfig(

继承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方法,满足日常工作。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读