继承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:
        = Test(ip)
        t.start()
    #等待所有线程结束
    for in threading.enumerate():
        if 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:
        = Test(threadingSum,ip)
        t.start()
    #等待所有线程结束
    for in threading.enumerate():
        if is threading.currentThread():
            continue
        t.join()
                                                             
    logging.debug('Done!')

运行结果:

接下来就根据需要来扩展run方法,满足日常工作。

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1322247如需转载请自行联系原作者

lihuipeng

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

  1. Shell多线程操作及线程数控制实例

    来源:http://www.jb51.net/article/51720.htm 这篇文章主要介绍了Shell多线程操作及线程数控制实例,文中从单线程实现一个需求开始,不断加入代码实现多线程以及线程数 ...

  2. python多线程_python多线程:控制线程数量

    背景 前段时间学习了python的多线程爬虫,当时爬取一个图片网站,开启多线程后,并没有限制线程的数量,也就是说,如果下载1000张图片,会一次性开启1000个子线程同时进行下载 现在希望控制线程数量 ...

  3. Python SSH爆破以及Python3线程池控制线程数

    源自一个朋友的要求,他的要求是只爆破一个ip,结果出来后就停止,如果是爆破多个,完全没必要停止,等他跑完就好 #!usr/bin/env python #!coding=utf-8__author__ ...

  4. linux脚本多线程,Shell多线程操作及线程数控制实例

    前言 在业务开发过程中,经常会在后台写一些shell脚本处理数据,但估计很多人不知道shell脚本也可以支持多线程,而且非常简单.本篇文章主要就是介绍shell实现多进程以及进程数量控制. 需求 为了 ...

  5. 继承Thread类的方式创建多线程

    package MoreThread;public class MoreThread implements Runnable{@Overridepublic void run() {for(int i ...

  6. python 继承并定制父类的初始化方法,python 继承类的初始化用法

    Python 中,子类B继承父类A时候会用class B(A):的代码形式声明B. class A: def __init__(self, x=1, y=2): self.x = x self.y = ...

  7. Shell(6): 多线程操作及线程数

    任务需要:当我需要对一个文件夹中的文件,分别压缩的时候: 原始的代码: 1 #!/usr/bin/shell 2 function getdir(){ 3 for element in `ls $1` ...

  8. Java多线程学习(二)---线程创建方式

    线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...

  9. 线程实现的方式、多线程模型

    文章目录 前言 一.用户级线程 二.内核级线程 三.组合实现 四.多线程模型 1.多对一模型 2.一对一模型 3.多对多模型 前言 参考文章:https://blog.csdn.net/qq_4060 ...

最新文章

  1. 火狐 4 月全球使用量首超微软
  2. Java Web整合开发(14) -- Struts 1.x 概述
  3. Python 学习笔记之字典(进阶篇)
  4. java中文 x_java环境url中文参数乱码处理
  5. Android笔记——在布局文件中插入另一个布局文件
  6. Foxmail怎么诊断邮件的状态
  7. git命令详解( 六 )
  8. 兼容M1芯片 Denise Audio poltergate Mac - 侧链均衡器
  9. 【Perl系列】之一:Perl编程语言入门篇
  10. ipad2 白苹果惊魂
  11. 腾达无线usb wifi 网卡u1/u3 RTL8192EU在centos7.6/7.7的编译适配
  12. 电子计算机主机房国标,中华人民共和国国家标准电子计算机机房设计规范
  13. Failed to open the host Key database file
  14. 60岁首席工程师被SpaceX边缘化,主管:我怕他退休或死了
  15. html中pc端与移动端区别,盘点移动端和PC端交互设计上的区别
  16. 基于Android的医院预约挂号系统,基于Android的医院预约挂号系统设计与实现
  17. java连不上sqlserver_java和SQL连接不上——解决步骤
  18. 零基础入门网络渗透到底要怎么学?
  19. clip-path 绘制五角星
  20. 中国石油大学(华东)数据分析(Python)

热门文章

  1. ubuntu建立向windows一样的快捷方式
  2. bim 模型web页面展示_BIM+装配式建筑工程师2020年必须拿下的技能证书
  3. 5 华为兼容性 双指缩放_华为EMUI10“滚屏翻译”之背后的学问
  4. python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
  5. php 获取文件扩展名的方法,PHP获取文件扩展名的4种方法,_PHP教程
  6. 三个变量互换值_Python3 教程 变量类型
  7. 4g能达到多少兆_“吃鸡”无敌战神以后,还有其他段位存在吗?最高能达到多少星?...
  8. mysql主从异步复制_centos7mysql主从复制(默认异步)
  9. linux 密码策略设置,设置Linux密码策略
  10. oracle 11g 忘记了sys,system,scott密码