前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Python】独特的进程池概念

【Python】独特的进程池概念

作者头像
杨丝儿
发布于 2022-02-25 12:24:08
发布于 2022-02-25 12:24:08
1.6K00
代码可运行
举报
文章被收录于专栏:杨丝儿的小站杨丝儿的小站
运行总次数:0
代码可运行
🌟总结放开头
  • 创建进程池可以形象的理解为创建了一个能够并行的流水线,只消耗一次创建流水线的成本,处理接收到的的任务。相对的,如果不使用进程池,每个要求并行的任务都会新建一次进程,浪费时间。
  • 编程中本来没有进程池的概念的,除了python,其他的语言都是使用线程池(而进程是执行分隔开的任务)。python因为GIL的原因(仅限Cython),线程无法并行,所以把线程池的概念迁移到了进程,命名为进程池。

🌟python进程池

当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程。

但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。

  1. 初始化Pool时,可以指定一个最大进程数
  2. 当有新的请求提交到Pool中时
    • 如果池还没有满,那么就会 创建 一个新的进程用来执行该请求;
    • 如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务。

🌟进程池如何使用?

⭐️apply()

函数原型:apply(func[, args=()[, kwds={}]])

该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束(不建议使用,并且3.x以后不再出现)

⭐️apply_async

函数原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])

与apply用法一致,但它是非阻塞的且支持结果返回后进行回调

⭐️map()

函数原型:map(func, iterable[, chunksize=None])

Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到结果返回 注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程

⭐️map_async()

函数原型:map_async(func, iterable[, chunksize[, callback]]) 与map用法一致,但是它是非阻塞的

⭐️close()

关闭进程池(pool),使其不再接受新的任务

⭐️terminal()

结束工作进程,不再处理未处理的任务

⭐️join()

主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用

⭐️使用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入相关multiprocessing包
import multiprocessing

# 创建拥有CPU核心数量的进程的进程池
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())

for i in range(100):
    # # 阻塞等待当前任务的进程结束
    # pool.apply(func=pow, args=(i,2))

    # 不阻塞等待当前任务的进程结束
    pool.apply_async(func=pow, args=(i, 2))

# # map函数到一个列表,阻塞等待返回值
# results = pool.map(func=print, iterable=[i for i in range(10000)])

# # 不阻塞等待返回值,未运行完就调用results会报错。
# results = pool.map_async(func=print, iterable=[i for i in range(10000)])

# close后不会有新的进程加入到pool
pool.close()

# join函数等待所有子进程结束 # 调用join之前,先调用close函数,否则会出错。
pool.join()

# # 结束工作进程,不再处理未完成的任务。
# pool.terminate()

🌟进程池中的进程和一般的进程有何区别?

⭐️进程池中的Queue

  • 如果要使用进程池创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue()
  • 使用的方法是一样的,都是创建了一个缓存队列,再采用q.put()添加、q.get()阻塞等待获取。

🌟参考文献

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android自定义弹出计时进度条-ProgressDialog和ProgressBar的用法
前言:最近Android开发需要做一个弹出框进度条,经过几天的学习调研,现在在这里总结一下。
用户7557625
2020/07/15
2.5K0
Android自定义弹出计时进度条-ProgressDialog和ProgressBar的用法
对话框(AlertDialog)使用
image.png 目录 AlertDialog AlertDialog也就处对话框。 使用方式分为6种: 简单dialog 列表dialog 单选dialog 多选dialog 自定义dialog 使用adapter的dialog 举例第一种的使用 代码: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.mipmap.ic_launcher_round);
李小白是一只喵
2020/04/24
2K0
Android UI学习之Dialog
本节学习Diaolog。在生活中Dialog包括:三种样式(单选对话框,多选对话框,确定取消对话框)
DragonKingZhu
2022/05/08
6010
Android UI学习之Dialog
Android的几种弹出框
项目效果图: image 新建一个项目,结构图如下所示: image activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <Linear
Dream城堡
2019/01/28
5.5K0
Android常用对话框大全——Dialog「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137960.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/23
4.3K0
Android常用对话框大全——Dialog「建议收藏」
Android-弹窗AlterDialog对话框使用全解析
// 由于Dialog 本身原因 选完后 dialog会自动关闭 如果不想自动关闭,可以:不关闭方法
圆号本昊
2021/09/24
1.9K0
Android-弹窗AlterDialog对话框使用全解析
Android开发必知--几种不同对话框的实现
  在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的。在看具体实例之前先对AlertDialog做一个简单介绍。AlertDialog是功
codingblock
2017/12/28
2.4K0
Android开发必知--几种不同对话框的实现
android入门 — AlertDialog对话框
  常见的对话框主要分为消息提示对话框、确认对话框、列表对话框、单选对话框、多选对话框和自定义对话框。   对话框可以阻碍当前的UI线程,常用于退出确认等方面。   在这里主要的步骤可以总结为:   1.创建AlertDialog.Builder对象;   2.调用setTitle()或setCustomTitle()方法设置标题;   3.调用setIcon()设置图标;   4.调用setPositiveButton()、setNegativeButton()或setNeturalButton()添加
Mister24
2018/05/14
1.1K0
跟我学Android之十 对话框
Toast 是一种浮于屏幕最上层,用于显示消息的窗体,u 主要用于显示各种动作的提示信息,比如: Ø 正在编写的邮件自动保存到了草稿箱 Ø 删除某条通讯了成功了 u Toast 窗体只是占据一部分的屏幕窗口 u 当前的 Activity 依然保持存在并能与用户交互 u Toast 在显示一段时间超时后会自动关闭
张哥编程
2024/12/17
990
跟我学Android之十  对话框
Android之AlertDialog的基本使用
坦白说,AlertDialog我在工作中用得并不多,因为AlertDialog的样式比较固定和呆板,为了和App的整体设计匹配,一般都是使用自定义的Dialog,只有在要求不高时用一下。但是作为Android的基础控件之一,掌握它是十分有必要。网上相关的资料已经多如牛毛,一搜就有好几页。但我还是决定写一篇自己的博客。
233333
2021/04/09
1.6K0
Android之AlertDialog的基本使用
android dialog用法
转自:http://www.cnblogs.com/weeds/archive/2012/01/17/2324238.html
forrestlin
2022/04/02
1.5K0
Android里AlertDialog多种使用方法及DEMO
我们在使用Android的APP时经常会点击某个按钮弹出来选择的对话框提供选项,选择的对话框也可以分为多样,如确定取消类型,单选类型,复选类型,列表类型等.在Android中实现这个我们都可以用到AlterDialog进行实现.
Vaccae
2019/07/24
1.8K0
笔记17 | 复习AlertDialog(对话框)示例
前言 本节给大家带来是显示提示信息的第三个控件AlertDialog(对话框),查看源码知道是Dialog的子类!ProgressDialog,TimePickerDialog父类等。另外,会发现构造方法是保护的,如果我们要创建AlertDialog的话,我们需要使用到该类中的一个静态内部类:public static class Builder,然后来调用AlertDialog里的相关方法,来对AlertDialog进行定制,最后调用show()方法来显示我们的AlertDialog对话框!好的,下面我们
项勇
2018/06/19
6640
Android 对话框组件 AlertDialog 四种常用方法
本文原创首发CSDN,链接 https://blog.csdn.net/qq_41464123/article/details/106618845 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本段文字,尤其是脚本之家、码神岛等平台,谢谢配合.
Designer 小郑
2023/08/01
4750
Android 对话框组件 AlertDialog 四种常用方法
Adrnoid开发系列(二十五):使用AlertDialog创建各种类型的对话框
AlertDialog能够生成各种内容的对话框。可是每种对话框都会有这样的的结构:
全栈程序员站长
2022/07/07
7870
Adrnoid开发系列(二十五):使用AlertDialog创建各种类型的对话框
【Android从零单排系列十五】《Android视图控件——AlertDialog》
小伙伴们,在上文中我们介绍了Android视图组件RatingBar,本文我们继续盘点,介绍一下视图控件的AlertDialog。
再见孙悟空_
2023/07/17
2120
速读原著-Android应用开发入门教程(弹出对话框)
在 GUI 程序中,有时需要弹出对话框来提示一些信息。这些对话框比一个独立的屏幕简单,在 Android 中弹出式对话框不同于表示一个屏幕的活动,它通常用于简单的功能处理。
cwl_java
2020/01/15
1.4K0
信息提醒之对话框(AlertDialog + ProgressDialog)-更新中
Android中的对话框需要使用AlertDialog类来显示,主要用于显示提醒信息,不过这个对话框类可不仅仅能用来显示一些信息,我们可以在对话框中防止任何的控件,使其成为一个复杂且功能强大的用户接口。一个典型的例子就是使用AlertDialog做一个登录对话框。
小小工匠
2021/08/16
4.6K0
Android经常使用的五种弹出对话框[通俗易懂]
  一个Android开发中经常使用对话框的小样例,共同拥有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框:
全栈程序员站长
2022/02/01
2.4K0
相关推荐
Android自定义弹出计时进度条-ProgressDialog和ProgressBar的用法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验