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



相关文章
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80
|
24天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
3月前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
173 59
|
2月前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
53 14
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
119 2
|
2月前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
65 10
|
2月前
|
机器学习/深度学习 人工智能 Java
Python 语言:强大、灵活与高效的编程之选
本文全面介绍了 Python 编程语言,涵盖其历史、特点、应用领域及核心概念。从 1989 年由 Guido van Rossum 创立至今,Python 凭借简洁的语法和强大的功能,成为数据科学、AI、Web 开发等领域的首选语言。文章还详细探讨了 Python 的语法基础、数据结构、面向对象编程等内容,旨在帮助读者深入了解并有效利用 Python 进行编程。
|
2月前
|
机器学习/深度学习 人工智能 数据挖掘
探索Python编程的奥秘
在数字世界的海洋中,Python如同一艘灵活的帆船,引领着无数探险者穿梭于数据的波涛之中。本文将带你领略Python编程的魅力,从基础语法到实际应用,一步步揭开Python的神秘面纱。
59 12

热门文章

最新文章