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

简介:

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

运行结果:

170501236.png


接着用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!' )

运行结果:

170637287.png

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

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


lihuipeng

相关文章
|
16天前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
86 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
3天前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
32 20
|
9天前
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。
|
2月前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
79 1
|
2月前
|
算法 Python
Python多继承时子类如何调用指定父类
通过本文的介绍,希望您能够深入理解Python多继承时子类如何调用指定父类的方法,并在实际项目中灵活运用这些技巧,编写出高效且易维护的代码。
56 11
|
2月前
|
算法 Python
Python多继承时子类如何调用指定父类
通过本文的介绍,希望您能够深入理解Python多继承时子类如何调用指定父类的方法,并在实际项目中灵活运用这些技巧,编写出高效且易维护的代码。
49 1
|
2月前
|
Java
【JavaEE】——多线程常用类
Callable的call方法,FutureTask类,ReentrantLock可重入锁和对比,Semaphore信号量(PV操作)CountDownLatch锁存器,
|
2月前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
|
2月前
|
安全 Java API
【JavaEE】多线程编程引入——认识Thread类
Thread类,Thread中的run方法,在编程中怎么调度多线程
|
3月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。