Python学习笔记之进程池pool

这篇具有很好参考价值的文章主要介绍了Python学习笔记之进程池pool。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

平时很多操作都会用到多进程,比如爬虫数据处理。

下面介绍一下多进程的函数方法参数及使用方法。

目录

一.进程池Pool介绍

1.apply()

2.apply_async

3.map()

4.map_async()

5.close()

6.terminal()

7.join()

二.进程池Pool使用

1.map用法

2.apply_async用法

3.进程池调用后返回结果


需要注意,在Windows上使用进程模块,

必须把有关进程的代码写在

if __name__ == “__main__”:

语句的下面,才能正常使用Windows下的进程模块,否则会报错。

Unix/Linux下则不需要。

一.进程池Pool介绍

Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

下面介绍一下multiprocessing 模块下的Pool类下的几个方法:

1.apply()

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

    该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束

2.apply_async

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

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

3.map()

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

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

4.map_async()

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

5.close()

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

6.terminal()

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

7.join()

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

二.进程池Pool使用

1.map用法

map函数第一个参数是要调用的函数名不带括号,第二个参数是一个可迭代的参数,map函数会将参数一个个的传递到调用的函数中。

# -*- coding: UTF-8 -*-
from multiprocessing import Pool


# 要在调用进程池执行的函数
def func(num):
    print("echo:", num)


if __name__ == '__main__':
    # 进程池最大运行数 不设置则为电脑所有cpu
    p = Pool(processes=4)
    # 模拟并发调用线程池
    i = [i for i in range(10)]
    p.map(func, i)

效果如下:

Python学习笔记之进程池pool

2.apply_async用法

# -*- coding: UTF-8 -*-
from multiprocessing import Pool


def func(num1):
    print("echo %d" % num1)


if __name__ == '__main__':
    p = Pool(processes=4)
    for i in range(10):
        p.apply_async(func, (i,))
    # 调用join之前,先调用close函数,否则会出错。
    # 执行完close后不会有新的进程加入到pool
    # join函数等待所有子进程结束
    p.close()
    p.join()

 效果如下:

Python学习笔记之进程池pool

3.进程池调用后返回结果

# -*- coding: UTF-8 -*-
from multiprocessing import Pool


def func(num):
    return num


if __name__ == '__main__':
    p = Pool(processes=4)
    # 申明一个列表,用来存放各进程返回的结果
    result_list = []
    for i in range(10):
        # 将返回结果append到列表中
        result_list.append(p.apply_async(func, [i]))
    # 循环读出列表返回的结果
    for res in result_list:
        print("num %d" % res.get())

效果如下:

Python学习笔记之进程池pool

就写到这里吧,如有不足,望指正!

 文章来源地址https://www.toymoban.com/news/detail-447981.html

到了这里,关于Python学习笔记之进程池pool的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 学习笔记(4)—— webdriver 自动化操作浏览器(基础操作)

    安装 web driver:         使用 driver 前,需要下载与浏览器版本相对应的 driver。如要在 Chrome 浏览器上操作,就要下载Chrome Driver。 几个常用浏览器的参考和下载地址: Edge Driver :https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ Chrome Driver :https://sites.google.com/chromium.

    2024年02月09日
    浏览(49)
  • 谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行

    Win10 专业版 谷歌浏览器 版本 116.0.5845.141(正式版本) (64 位) L盾加密终端 谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行,要全部结束谷歌浏览器进程,重新打开浏览器才能使用 任务管理器下面 1.官网重新下载最新版,重新安装谷歌浏览器,过几天又出现(

    2024年02月10日
    浏览(54)
  • 【Python_Selenium学习笔记(五)】基于Selenium模块实现鼠标操作

    为了模拟鼠标操作,Selenium 模块提供了 Actionchains 类,可以模仿人的几乎任何鼠标行为操作; 在此篇文章主要介绍 Actionchains类 的常用方法,使用流程,并以具体的示例进行展示。 perform():执行ActionChains中存储的行为; context_click(on_element=None):点击鼠标右键; double_click(on_

    2024年02月13日
    浏览(45)
  • 【Python_Selenium学习笔记(四)】基于Selenium模块实现键盘操作

    在 Selenium 模块中,提供了一个 Keys 类,来处理键盘操作; 在 Selenium 模块中,使用 send_keys() 方法,来模拟键盘输入, 此篇文章主要介绍如何使用 Keys 类 和 send_keys() 方法 实现 模拟键盘操作,并以具体的示例进行展示。 Keys类键盘事件 实现功能 Keys.BACK_SPACE 删除键 Keys.SPACE 空

    2023年04月09日
    浏览(106)
  • (学习笔记-进程管理)进程

    我们编写的代码只是一个存储在硬盘的静态文件,通过编译后会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着CPU会执行程序中的每一条指令,那么这个 运行中的程序就被称为进程 。 现在我们考虑有一个会读取硬盘文件数据的程序执行了

    2024年02月14日
    浏览(42)
  • (学习笔记-进程管理)进程间有哪些通信方式?

    每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间时每个进程都共享的,所以进程之间要通信必须通过内核   在Linux命令中 [ | ]  这个竖线就是一个 管道 。 它的功能是讲前一个命令(ps auxf)的输出,作为后一个命令(grep mysql)的输入,从这功

    2024年02月13日
    浏览(51)
  • (学习笔记-进程管理)线程

    在早期的操作系统都是以进程为独立运行的基本单位,直到后面,计算机科学家们提出了更小的能独立运行的基本单位: 线程   举个例子,假设要编写一个视频播放软件,那么软件功能的核心模块有三个: 从视频文件中读取数据 对读取的数据进行解压缩 把压缩后的视频数

    2024年02月14日
    浏览(41)
  • 进程间通信--学习笔记

    # 进程间通信 --pipe、FIFO、共享内存、消息队列、信号量 ​只能实现有亲缘关系进程之间的通信,它是单向的, fd[0] : 读文件,fd[1] :写文件。 之后可以用open()、write()函数进行对管道进行操作, 创建管道要在fork()之前以保证父子进程操作是同一个管道。 mode : ​F_OK : 检查文件是

    2024年02月05日
    浏览(33)
  • 进程控制学习笔记

    子进程的退出需要父进程对其资源的释放,子进程只能对用户区的数据进行释放,无法完成对内核区的释放。 可以获取到。 两个退出的区别: 系统调用不会刷新缓冲区,只会显示”hello\\\"(/n会刷新缓冲区)。 而C库函数调用会刷新缓冲区,会将“world\\\"显示出来,return 0 相当于

    2024年02月16日
    浏览(31)
  • (学习笔记-进程管理)怎么避免死锁?

    在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。 那么,当两个线程为了保护两个不同的共享资源而使用了两个互斥锁,

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包