Python进程池multiprocessing.Pool八个函数对比

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


主要内容

Python的multiprocessing.Pool类提供了多种方法来分发任务给进程池中的工作进程。这些方法在功能和用途上有所不同,适用于不同的场景。以下是multiprocessing.Pool中八个主要函数的对比

  1. apply()
  • 功能:阻塞地执行一个函数,直到这个函数的执行完成。
  • 用法:apply(func, args=(), kwds={})
  • 特点:类似于内置的apply函数,但在池中的一个进程中执行。
  1. apply_async()
  • 功能:异步版本的apply,不会等待函数执行完成。
  • 用法:apply_async(func, args=(), kwds={}, callback=None, error_callback=None)
  • 特点:可以提供回调函数,当函数执行完成时调用。
  1. map()
  • 功能:类似于内置的map函数,但并行地在多个进程中执行。
  • 用法:map(func, iterable, chunksize=None)
  • 特点:阻塞直到结果返回,适用于处理可迭代对象。
  1. map_async()
  • 功能:map的异步版本。
  • 用法:map_async(func, iterable, chunksize=None, callback=None, error_callback=None)
  • 特点:不会阻塞,可以提供回调函数。
  1. starmap()
  • 功能:类似于map,但适用于函数需要多个参数的情况。
  • 用法:starmap(func, iterable, chunksize=None)
  • 特点:阻塞直到结果返回,适用于迭代器提供多个参数。
  1. starmap_async()
  • 功能:starmap的异步版本。
  • 用法:starmap_async(func, iterable, chunksize=None, callback=None, error_callback=None)
  • 特点:不会阻塞,可以提供回调函数。
  1. imap()
  • 功能:类似于map,但返回一个迭代器。
  • 用法:imap(func, iterable, chunksize=1)
  • 特点:可以立即开始处理结果,而不必等待所有任务完成。
  1. imap_unordered()
  • 功能:类似于imap,但结果的顺序不保证与输入的顺序相同。
  • 用法:imap_unordered(func, iterable, chunksize=1)
  • 特点:适用于结果顺序不重要的场景,可能比imap更高效。

案例

以下是multiprocessing.Pool中每个函数的示例:文章来源地址https://www.toymoban.com/news/detail-764491.html

  1. apply()
from multiprocessing import Pool

def square(x):
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        result = p.apply(square, (10,))
        print(result)

  1. apply_async()
from multiprocessing import Pool

def square(x):
    return x * x

def print_result(result):
    print(result)

if __name__ == '__main__':
    with Pool(4) as p:
        result = p.apply_async(square, (10,), callback=print_result)
        result.wait()  # 等待任务完成

  1. map()
from multiprocessing import Pool

def square(x):
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        results = p.map(square, range(10))
        print(results)

  1. map_async()
from multiprocessing import Pool

def square(x):
    return x * x

def print_result(result):
    print(result)

if __name__ == '__main__':
    with Pool(4) as p:
        result = p.map_async(square, range(10), callback=print_result)
        result.wait()  # 等待所有任务完成

  1. starmap()
from multiprocessing import Pool

def multiply(x, y):
    return x * y

if __name__ == '__main__':
    with Pool(4) as p:
        results = p.starmap(multiply, [(1, 2), (2, 3), (3, 4)])
        print(results)

  1. starmap_async()
from multiprocessing import Pool

def multiply(x, y):
    return x * y

def print_result(result):
    print(result)

if __name__ == '__main__':
    with Pool(4) as p:
        result = p.starmap_async(multiply, [(1, 2), (2, 3), (3, 4)], callback=print_result)
        result.wait()  # 等待所有任务完成

  1. imap()
from multiprocessing import Pool

def square(x):
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        for result in p.imap(square, range(10)):
            print(result)

  1. imap_unordered()
from multiprocessing import Pool

def square(x):
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        for result in p.imap_unordered(square, range(10)):
            print(result)

总结

  • apply和map系列函数提供了同步和异步的选项,适用于不同的并行处理需求。
  • apply适用于单个函数调用,map适用于处理可迭代对象。
  • starmap适用于函数需要多个参数的情况。
  • imap和imap_unordered提供了更灵活的迭代方式,允许在任务完成前开始处理结果。
  • 异步函数(带_async)允许程序继续执行而不必等待结果,可以提供回调函数处理结果。

到了这里,关于Python进程池multiprocessing.Pool八个函数对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【python】tkinter使用多进程打包成exe后multiprocessing无法关闭对应进程

    这是由于multiprocessing模块在Windows操作系统下使用fork方法创建子进程时会导致打包成exe后无法正常运行的问题。 可以尝试使用freeze_support函数来解决这个问题。freeze_support函数是在Windows操作系统下用于支持multiprocessing模块的函数。 下面是一个示例代码: 在代码的开头,我们导

    2024年02月11日
    浏览(32)
  • Python 标准类库-并发执行之multiprocessing-基于进程的并行

    Python3.6 multiprocessing 是一个支持使用类似于线程模块的API派生进程的包。该包同时提供本地和远程并发,通过使用子进程而不是线程,有效地避开了全局解释器锁。因此, multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。它同时在Unix和Windows上运行。 该模块还引

    2024年02月09日
    浏览(24)
  • Python__模块(TIME-进程/线程)__concurrent / multiprocessing

    进程或线程的使用。 线程是共享内存空间。 进程是内存独立状态。 同一个进程的线程之间可以直接交流。 两个进程想通信,必须通过一个中间代理来实现。 使用多线程能充分利用 CPU 来提供程序的执行效率。 每一个进程启动时都会最先产生一个线程,即主线程,然后主线程

    2024年02月04日
    浏览(27)
  • 【神行百里】python开启多线程(threading)与多进程(multiprocessing)运行

      由于处理数据过多,程序运行很慢,就学习了一下python开启多线程与多进程的方法,虽然最后也没用上,但还是记录总结一下,以备不时之需。   传送门:进程与线程认识,进程与线程通俗理解   简言之, 进程为资源分配的最小单元,线程为程序执行的最小单元

    2024年02月02日
    浏览(33)
  • 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.进程池调用后返回结果 需要注意,

    2024年02月05日
    浏览(29)
  • 由浅入深走进Python异步编程【多进程】(含代码实例讲解 || multiprocessing、异步进程池、进程通信)

    从底层到第三方库,全面讲解python的异步编程。这节讲述的是python的多线程实现,纯干货,无概念,代码实例讲解。 本系列有6章左右,点击头像或者专栏查看更多内容,陆续更新,欢迎关注。 部分资料来源及参考链接: https://www.bilibili.com/video/BV1Li4y1j7RY/ 现在让我们初步进入

    2024年02月03日
    浏览(37)
  • 在Python中优雅地用多进程:进程池 Pool、管道通信 Pipe、队列通信 Queue、共享内存 Manager Value

    Python 自带的多进程库 multiprocessing 可实现多进程。我想用这些短例子示范如何优雅地用多线程。中文网络上,有些人只是翻译了旧版的 Python 官网的多进程文档。而我这篇文章会额外讲一讲下方加粗部分的内容。 创建进程 Process, fork 直接继承资源,所以初始化更快,spawn 只

    2024年02月16日
    浏览(25)
  • python进程池中的回调函数

    指定一个任务后、并且指定一个回调函数后,当指定的进程池执行的任务结束后,会将该任务的返回值作为回调函数的参数传递到回调函数中,并且回调函数得以执行 回调函数在主进程中被执行 10个任务func1投入到含有4个进程的进程池中异步执行,并且指定回调函数为func2,

    2023年04月15日
    浏览(22)
  • python multiprocessing库使用记录

    需求是想并行调用形式化分析工具proverif,同时发起对多个query的分析(378个)。实验室有40核心80线程的服务器(双cpu,至强gold 5218R*2)。 观察到单个命令在分析时内存占用不大,且只使用单核心执行,因此考虑同时调用多个命令同时执行分析,加快结果输出。 最底层的逻辑

    2024年02月12日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包