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,如需转载请自行联系原作者



相关文章
|
8天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
8天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
8天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
2天前
|
存储 人工智能 数据挖掘
Python编程入门:打造你的第一个程序
本文旨在为初学者提供Python编程的初步指导,通过介绍Python语言的基础概念、开发环境的搭建以及一个简单的代码示例,帮助读者快速入门。文章将引导你理解编程思维,学会如何编写、运行和调试Python代码,从而开启编程之旅。
22 2
|
2天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
3天前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
11 1
|
10天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
5天前
|
存储 网络协议 IDE
从零起步学习Python编程
从零起步学习Python编程
|
9天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。
|
9天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
下一篇
无影云桌面