当前位置: 首页 > news >正文

Python知识点20---池

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。

如果看了我发的线程和进程的知识点的朋友,如果发散思维能力很强,那么可能会出现一个,就是我操作线程和进程的方法很low,导致两个问题

一是如果有很多需要创建的线程或进程一个一个的创建那要累死,而写for循环也不好控制

二是我写的操作方法,貌似只能操作普通的函数,而对于类的方法来说就是个灾难,因为会受self参数的影响,不传吧,报错,传吧,不知道传什么

所以在这篇博文中对操作线程和进程做一个补充,首先之前我操作的方法,是为了初学者能够直接看明白,但其实在正经开发中我们不会那样使用,我们会使用


下面看一下怎么使用进程池,并且在类中使用!!!!解决大家对self的疑惑

import multiprocessing 
import os,timeclass Stu :def pri(self):print('--------进程',os.getpid(),'开始执行代码')time.sleep(2)print('--------进程',os.getpid(),'结束执行')def run(self) :#创建一个进程池,最多有6进程pool = multiprocessing.Pool(6)#循环,模拟向进程池中提交任务,直接通过self传递for i in range(10) :pool.apply_async(self.pri)#关闭池不在接收新的进程,一定要先关闭,不然提交动作会导致停止不了线程池pool.close()#等待池中的进程执行完毕,程序彻底结束,一定要调用这个方法,不然程序直接就是结束了pool.join()if __name__ == '__main__' :stu = Stu()stu.run()结果:
--------进程 4220 开始执行代码
--------进程 12500 开始执行代码
--------进程 9880 开始执行代码
--------进程 7028 开始执行代码
--------进程 696 开始执行代码
--------进程 11832 开始执行代码
--------进程 4220 结束执行
--------进程 12500 结束执行
--------进程 4220 开始执行代码
--------进程 12500 开始执行代码
--------进程 9880 结束执行
--------进程 696 结束执行
--------进程 7028 结束执行
--------进程 9880 开始执行代码
--------进程 696 开始执行代码
--------进程 11832 结束执行
--------进程 4220 结束执行
--------进程 12500 结束执行
--------进程 696 结束执行
--------进程 9880 结束执行

对普通方法使用进程池就不演示了,毕竟和之前的操作原理是一样的


下面看一下如何操作线程池,同样的直接演示在类中操作

from concurrent.futures import ThreadPoolExecutor,waitclass Stu :def myInfe(self) :print('-------')def run(self) :#创建一个线程池executor = ThreadPoolExecutor(max_workers=2)#提交一个任务task1 = executor.submit(self.myInfe)wait([task1])#这个方法的任务参数必须是列表if __name__ == '__main__' :stu = Stu()stu.run()

上面这个是Python直接可以使用的线程池模块,我也给大家找了一个资源,详细的介绍了怎么使用它,大家有兴趣可以看看–》Python官方线程池的使用

但是大家注意,在Python开发中还有一种线程池,这个线程池不是Python直接自带的,你想要使用需要另外下载一个threadpool的包才可以,使用方法如下

import threadpooldef ThreadFun(arg1,arg2):  print(arg1+arg2)def main():  device_list=[(1,2),(3,4),(5,6)]#准备参数task_pool=threadpool.ThreadPool(2)#2是线程池中最大线程的个数  request_list=[]#存放任务列表 #首先构造任务列表  for device in device_list:  request_list.append(threadpool.makeRequests(ThreadFun,device))#将每个任务放到线程池中,等待线程池中线程各自读取任务,然后进行处理,使用了map函数,不了解的可以去了解一下。  [ task_pool.putRequest(re) for re in request_list] #等待所有任务处理完成,则返回,如果没有处理完,则一直阻塞  task_pool.poll()main()

相关文章:

  • C++ 宏定义中的##
  • 【JavaEE】Servlet
  • MFC:初步理解序列化与反序列化(含代码实现)
  • 【机器学习】之 K-最近邻(KNN)算法原理及实现
  • 【JAVA WEB实用与优化技巧】如何使用本地.bat/.sh脚本快速将服务发布到测试环境?
  • NVIDIA发布重磅AI创新,黄仁勋在COMPUTEX大会预示计算未来
  • 面向对象程序设计之从C到C++的初步了解
  • 奶茶店、女装店、餐饮店是高危创业方向,原因如下:
  • 一个知识问答系统,用户的选择决定接下来出现的问题,且下一个问题的呈现取决于前面几个问题的回答
  • 工业4.0利器:MES系统
  • 在一个定义好的数据对象(class)中,后续更新时只更新其中部分数据,其余部分会恢复初始设置吗
  • Amazon云计算AWS(四)
  • typescript --object对象类型
  • 开发和渗透偷懒利器utools
  • 鲁教版七年级数学下册-笔记
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 07.Android之多媒体问题
  • Android交互
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • es6(二):字符串的扩展
  • Java编程基础24——递归练习
  • vue-cli在webpack的配置文件探究
  • XML已死 ?
  • 闭包--闭包之tab栏切换(四)
  • 原生js练习题---第五课
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • zabbix3.2监控linux磁盘IO
  • 容器镜像
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #数学建模# 线性规划问题的Matlab求解
  • (28)oracle数据迁移(容器)-部署包资源
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (二)正点原子I.MX6ULL u-boot移植
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (七)理解angular中的module和injector,即依赖注入
  • (三)elasticsearch 源码之启动流程分析
  • (十三)Flink SQL
  • (四)opengl函数加载和错误处理
  • (一)UDP基本编程步骤
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)程序员疫苗:代码注入
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net wcf memory gates checking failed
  • .Net Web窗口页属性
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net后端程序发布到nignx上,通过nginx访问