python day Twelve

简介:

python day Twelve

一、线程池(补充)

1.上下文管理  

2.终止线程池操作

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
1. 线程和队列
 
import  queue
import  threading
 
class  ThreadPool( object ):
     def  __init__( self , max_num = 20 ):          #max_num:固定队列参数20
         self .queue  =  queue.Queue(max_num)
         for  in  range (max_num):             #往队列里边循环加线程
             self .queue.put(threading.Thread)
     def  get_thread( self ):                    #获取线程
         return  self .queue.get()
     def  add_thread( self ):                    #增加线程,用于不断增加线程
         self .queue.put(threading.Thread)
 
pool  =  ThreadPool( 10 )            #定义线程池10个
def  func(arg, p):
     print  (arg)
     import  time
     time.sleep( 2 )                #等待2s
     p.add_thread()               #上边执行完一个任务后,线程自动关闭,再手动增加一个线程到队列。
 
for  in  range ( 30 ):              #有30个任务需要执行
     thread  =  pool.get_thread()    #从队列里获取一个线程
     =  thread(target = func, args = (i, pool))
     t.start()                    #启动线程
     
     
2. 上下文管理和终止线程操作
 
import  queue
import  threading
import  contextlib
import  time
 
StopEvent  =  object ()
class  ThreadPool( object ):
     def  __init__( self , max_num, max_task_num  =  None ):
         if  max_task_num:
             self .q  =  queue.Queue(max_task_num)
         else :
             self .q  =  queue.Queue()
         self .max_num  =  max_num
         self .cancel  =  False
         self .terminal  =  False
         self .generate_list  =  []
         self .free_list  =  []
     def  run( self , func, args, callback = None ):
         """
         线程池执行一个任务
         :param func: 任务函数
         :param args: 任务函数所需参数
         :param callback: 任务执行失败或成功后执行的回调函数,回调函数有两个参数1、任务函数执行状态;2、任务函数返回值(默认为None,即:不执行回调函数)
         :return: 如果线程池已经终止,则返回True否则None
         """
         if  self .cancel:
             return
         if  len ( self .free_list)  = =  0  and  len ( self .generate_list) <  self .max_num:
             self .generate_thread()
         =  (func, args, callback,)
         self .q.put(w)
 
     def  generate_thread( self ):                       #创建一个线程
         =  threading.Thread(target = self .call)
         t.start()
 
     def  call( self ):                          #循环去获取任务函数并执行任务函数
         current_thread  =  threading.currentThread()
         self .generate_list.append(current_thread)
         event  =  self .q.get()
         while  event ! =  StopEvent:
             func, arguments, callback  =  event
             try :
                 result  =  func( * arguments)
                 success  =  True
             except  Exception as e:
                 success  =  False
                 result  =  None
             if  callback  is  not  None :
                 try :
                     callback(success, result)
                 except  Exception as e:
                     pass
             with  self .worker_state( self .free_list, current_thread):
                 #上下文管理,内部运行一个装饰器,具体内容看例3
                 if  self .terminal:
                     event  =  StopEvent
                 else :
                     event  =  self .q.get()
         else :
             self .generate_list.remove(current_thread)
 
     def  close( self ):                         #执行完所有的任务后,所有线程停止
         self .cancel  =  True
         full_size  =  len ( self .generate_list)
         while  full_size:
             self .q.put(StopEvent)
             full_size  - =  1
     def  terminate( self ):                     #无论是否还有任务,终止线程
         self .terminal  =  True
         while  self .generate_list:
             self .q.put(StopEvent)
         self .q.queue.clear()
     @contextlib.contextmanager
     def  worker_state( self , state_list, worker_thread):
         #用于记录线程中正在等待的线程数
         state_list.append(worker_thread)
         try :
             yield
         finally :
             state_list.remove(worker_thread)
# How to use
pool  =  ThreadPool( 5 )
def  callback(status, result):
     # status, execute action status
     # result, execute action return value
     pass
def  action(i):
     print (i)
for  in  range ( 30 ):
     ret  =  pool.run(action, (i,), callback)
 
time.sleep( 5 )
print ( len (pool.generate_list),  len (pool.free_list))
print ( len (pool.generate_list),  len (pool.free_list))
# pool.close()            #等待任务结束之后,终止线程;终止线程池操作方法1.
pool.terminate()           #无论是否还有任务,终止线程;终止线程池操作方法2.
 
python  3.0 官方上下文管理详见:https: / / docs.python.org / 3 / library / contextlib.html


二、redis 发布订阅


三、rabbitMQ



四、mysql


五、python pymysql模块


六、python ORM框架:SQLAchemy


七、python Paramiko模块


八、基于Paramiko模块来看堡垒机如何实现





     本文转自506554897 51CTO博客,原文链接:http://blog.51cto.com/506554897/1846557,如需转载请自行联系原作者



相关文章
|
11月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1696 102
|
11月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
520 104
|
11月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
407 103
|
11月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
435 82
|
10月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
539 3
|
10月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
781 3
|
10月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
620 3
|
10月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
832 0
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
800 33
|
11月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的多面手
Python:现代编程的多面手
499 0