python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...

1、

2、 为啥要有 进程池和线程池

进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数

3、创建进程池的类pool

如果指定numprocess为3,则进程池会从无到有创建三个进程,然后自始至终使用这三个进程去执行所有任务,不会开启其他进程

pool([numprocess [,initializer [, initargs]]]):创建进程池

参数介绍:

numprocess:要创建的进程数,如果省略,将默认使用cpu_count()的值

initializer:是每个工作进程启动时要执行的可调用对象,默认为none

initargs:是要传给initializer的参数组

方法介绍:

主要方法:

p.apply(func [, args [, kwargs]])

在一个池工作进程中执行func(*args,**kwargs),然后返回结果。

需要强调的是:此操作并不会在所有池工作进程中并执行func函数。如果要通过不同参数并发地执行func函数,必须从不同线程调用p.apply()函数或者使用p.apply_async()

p.apply_async(func [, args [, kwargs]])

在一个池工作进程中执行func(*args,**kwargs),然后返回结果。此方法的结果是asyncresult类的实例,callback是可调用对象,接收输入参数。

当func的结果变为可用时,将理解传递给callback。callback禁止执行任何阻塞操作,否则将接收其他异步操作中的结果。

p.close()

关闭进程池,防止进一步操作。如果所有操作持续挂起,它们将在工作进程终止前完成

p.jion()

等待所有工作进程退出。此方法只能在close()或 teminate()之后调用

4、进程池和线程池

from concurrent.futures import threadpoolexecutor, processpoolexecutor

import time

import os

# pool = threadpoolexecutor(5) # 池子里面固定只有五个线程

# 括号内可以传数字 不传的话默认会开设当前计算机cpu个数五倍的线程

pool = processpoolexecutor(5)

# 括号内可以传数字 不传的话默认会开设当前计算机cpu个数进程

"""

池子造出来之后 里面会固定存在五个线程

这个五个线程不会出现重复创建和销毁的过程

池子造出来之后 里面会固定的几个进程

这个几个进程不会出现重复创建和销毁的过程

池子的使用非常的简单

你只需要将需要做的任务往池子中提交即可 自动会有人来服务你

"""

def task(n):

print(n,os.getpid())

time.sleep(2)

return n**n

def call_back(n):

print('call_back>>>:',n.result())

"""

任务的提交方式

同步:提交任务之后原地等待任务的返回结果 期间不做任何事

异步:提交任务之后不等待任务的返回结果 执行继续往下执行

返回结果如何获取???

异步提交任务的返回结果 应该通过回调机制来获取

回调机制

就相当于给每个异步任务绑定了一个定时炸弹

一旦该任务有结果立刻触发爆炸

"""

if __name__ == '__main__':

# pool.submit(task, 1) # 朝池子中提交任务 异步提交

# print('主')

t_list = []

for i in range(20): # 朝池子中提交20个任务

# res = pool.submit(task, i) #

res = pool.submit(task, i).add_done_callback(call_back)

# print(res.result()) # result方法 同步提交

# t_list.append(res)

# 等待线程池中所有的任务执行完毕之后再继续往下执行

# pool.shutdown() # 关闭线程池 等待线程池中所有的任务运行完毕

# for t in t_list:

# print('>>>:',t.result()) # 肯定是有序的

"""

程序有并发变成了串行

任务的为什么打印的是none

res.result() 拿到的就是异步提交的任务的返回结果

"""

参考资料:

希望与广大网友互动??

点此进行留言吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shader weaver_Oracle通过邀请Weaver和Chin推动JavaFX向前发展

shader weaver昨天,我发布了愚人节帖子,内容涉及加入NASA协助探索红色大行星。 那篇文章与事实相距不远……美国宇航局开发的技术的所有细节都是100%准确的。 哎呀,即使我辞职也是事实! 唯一不正确的部分是我将加入的公…

mysql快速上手3

上一章给大家说的是数据库的视图,存储过程等等操作,这章主要讲索引,以及索引注意事项,如果想看前面的文章,url如下: mysql快速上手1mysql快速上手2索引简介 索引是对数据库表中一个或多个列(例如…

python图像锐化_Python图像处理介绍--图像模糊与锐化

欢迎关注 “小白玩转Python”,发现更多 “有趣”引言在之前的文章中,我们讨论了边缘检测内核。在本文我们将讨论如何在图像上应用模糊与锐化内核,将这些内核应用到彩色图像上,同时保留核心图像。一如既往,我们从导入所…

看一下CDI 2.0 EDR1

CDI是最近对Java EE最好的补充之一。 该观点在用户和集成商之间广泛共享。 当前版本的CDI 1.2于2014年4月发布。现在,在2015年中期,我们将面对CDI 2.0规范的早期草案。 CDI 2.0将在Java 8和更高版本上运行。 最终版本计划于2016年发布,该路线…

redis key设计技巧

1: 把表名转换为key前缀 如, user: 2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 3: 第3段放置主键值,如2,3,4...., a , b ,c 4: 第4段,写要存储的列名 用户表 user , 转换为key-value存储 userid username passworde email 9 Lisi 1111111 li…

python编程游戏代码 游戏人物如何升级_如何玩游戏提高python编程技能?

笔者公众号:技术杂学铺Python Challenge是首个谜语编程网站。挑战者需要连续挑战33个需要编程才能解开的谜题以锻炼自己的编程能力。该网站建立于2005年,至今已经有三百多万位访客浏览并尝试解决该网站的谜题。python challenge 官网虽然网站建立的年代比…

Eclipse配置初始化(自用)

以上都是性能调优的配置,下面是其他常用的配置和优化 设置utf-8编码 window -> preferences -> General -> workplace中text file encoding改为utf-8 设置properties文件编码window -> preferences -> General -> Content Types —> Text —&g…

java bits_一段关于JAVA程序升级的问题(Changing bits)

展开全部import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.…

hibernate脏数据_Hibernate性能提示:脏收集效果

hibernate脏数据在使用Hibernate作为ORM开发服务器和嵌入式应用程序8年后,我全力以赴地寻求提高Hibernate性能的解决方案,阅读博客和参加会议,我决定与您分享在这些年中获得的知识。 这是更多新帖子中的第一篇: 去年,…

有关struts2中用到 js 总结

1.js中取Struts2中的栈里的值 var current "${currentPage}"; 2.js 如何提交执行提交url连接 ,以及 Struts中的url如何如何写 var current "${currentPage}"; location.href"showSeparatePageGoods.action?currentPage"current&q…

java合并两个有序链表_JS实现的合并两个有序链表算法示例

本文实例讲述了JS实现的合并两个有序链表算法。分享给大家供大家参考,具体如下:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出&…

外墙设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

8.25小结

1.导出csv文件 后台导出&#xff1a;CSVUtils工具类&#xff1a; /*** * CSV文件导出工具类* * author* reviewer*/ public class CSVUtils {public static File createCSVFile(List<Object> head, List<List<Object>>dataList, String outPutPath, String f…

java 监控 native 内存_JVM NativeMemoryTracking 分析堆外内存泄露

Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据。NMT介绍工欲善其事必先利其器&#xff0c;我们先把相关需要的配置和工具介绍清楚&#xff0c;再通过例子来看看具体如何使用NMT。打开NMT…

Charles 从入门到精通

目录与版权 转载请保留顶部的 Charles 中国特惠内容&#xff0c;本文的内容主要包括&#xff1a; Charles 的简介如何安装 Charles将 Charles 设置成系统代理Charles 主界面介绍过滤网络请求截取 iPhone 上的网络封包截取 Https 通讯信息模拟慢速网络修改网络请求内容给服务器做…

javafx11 最佳实践_JavaFX移动应用程序最佳实践,第1部分

javafx11 最佳实践到现在为止&#xff0c;所有对JavaFX感兴趣的人都会知道&#xff0c;JavaFX Mobile发行了不久 前。 可以肯定的是&#xff0c;这真是令人难以置信。 我感到非常筋疲力尽&#xff0c;在发行期间我什至没有精力去写博客…… 但是到目前为止&#xff0c;我感到很…

java 批量验证_正则表达式批量验证函数

正则表达式批量验证函数function checkData(){//判断数据的正确性var idSpans new Array();idSpans[0] new Array("item_4","^[\\s\\S]{1,16}$","productName","商机名称应在1-16字以内","",true); idSpans[1] new Array(…

css3制作炫酷导航栏效果 转

今天主要利用hover选择器。鼠标滑过查看效果。 一。普通导航栏 HomeContentServiceTeamContact对于这种普通的导航栏&#xff0c;只是鼠标滑过的时候颜色会变&#xff0c;所以思路变得很简单。 &#xff08;1&#xff09;使用ul标签布局 &#xff08;2&#xff09;鼠标经过事件…

桥梁设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

java计算面积的方法_JAVA多态计算面积main函数调用方法

public static void main(String[] args) {Shape shape;Scanner input new Scanner(System.in);System.out.println("请选择图形(1、圆形 2、矩形 3、三角形)");int a input.nextInt();if(a 1){System.out.println("请输入圆形的边长&#xff1a;");dou…