微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python 并行计算 并行方法总结 concurrent.futures pp pathos multiprocessing multiprocess模块 总结对比

目录

模块介绍文章

相近模块

1、按并行分类

(1)阻塞(非并行)

(2)批次并行

(3)异步

2、按传参分类

(1)单个任务,任务多参数

(2)多个任务,任务单参数

(3)多个任务,任务多参数

3、按返回分类

(1)返回任务返回值

(2)返回list

(3)返回ApplyResult

(4)返回MapResult

(5)返回迭代器或生成器

(6)无直接返回值


模块介绍文章

《python 并行计算 multiprocessing、multiprocess模块 简介》:

blog.csdn.net/whatday/article/details/123269350

《python 并行计算 pathos模块 简介》:

blog.csdn.net/whatday/article/details/123269604

《python 并行计算 concurrent.futures、pp模块 简介》:

blog.csdn.net/whatday/article/details/123270010

相近模块

以下模块、类与其他内容相同或接近,不重复介绍和比较:

multiprocess模块:与multiprocessing模块接口基本一致。

pathos.pp.pp模块:实质也即pp模块,与独立的pp模块完全相同。

pathos.multiprocessing.Pool():与multiprocess.Pool()完全相同。

pathos.multiprocessing.ProcessingPool()、pathos.pools.Processpool():与pathos.multiprocessing.Processpool()完全相同。

pathos.pp.ParallelpythonPool()、pathos.parallel.ParallelPool()、pathos.parallel.ParallelpythonPool()、pathos.pools.ParallelPool():与pathos.pp.ParallelPool()完全相同。

pathos.serial.SerialPool():实际是串行(非并行),不参与比较。

1、按并行分类

(1)阻塞(非并行)

非并行方式下,子进程串行执行(完成一个,然后开始下一个),实际不是并行。包括

multiprocessing.Pool(),apply方法

pathos.multiprocessing.Processpool(),pipe方法

pathos.pp.ParallelPool(),pipe方法

pathos.pp.ParallelPool(),map方法

pathos.pp.ParallelPool(),imap方法

(2)批次并行

批次并行指一批子进程并行执行,且直到该批次所有子进程完成后,才开始下一批次。包括

multiprocessing.Process() #只能一批一批地添加进程,同一批次内并行

(3)异步

异步执行指的是一批子进程并行执行,且子进程完成一个,就新开始一个,而不必等待同一批其他进程完成。包括

multiprocessing.Pool(),apply_async方法

multiprocessing.Pool(),map方法

multiprocessing.Pool(),map_async方法

multiprocessing.Pool(),imap方法

multiprocessing.Pool(),imap_unordered方法

multiprocessing.Pool(),starmap方法

multiprocessing.Pool(),starmap_async方法

concurrent.futures.ProcesspoolExecutor(),submit方法

concurrent.futures.ProcesspoolExecutor(),map方法

pathos.multiprocessing.Processpool(),map方法

pathos.multiprocessing.Processpool(),imap方法

pathos.multiprocessing.Processpool(),uimap方法

pathos.multiprocessing.Processpool(),amap方法

pathos.multiprocessing.Processpool(),apipe方法

pp.Server(),submit方法

pathos.pp.ParallelPool(),apipe方法

pathos.pp.ParallelPool(),amap方法

pathos.pp.ParallelPool(),uimap方法

2、按传参分类

(1)单个任务,任务多参数

multiprocessing.Process()

concurrent.futures.ProcesspoolExecutor(),submit方法

multiprocessing.Pool(),apply方法

multiprocessing.Pool(),apply_async方法

pathos.multiprocessing.Processpool(),pipe方法

pathos.multiprocessing.Processpool(),apipe方法

pp.Server(),submit方法

pathos.pp.ParallelPool(),pipe方法

pathos.pp.ParallelPool(),apipe方法

(2)多个任务,任务单参数

multiprocessing.Pool(),map方法

multiprocessing.Pool(),map_async方法

multiprocessing.Pool(),imap方法

multiprocessing.Pool(),imap_unordered方法

(3)多个任务,任务多参数

(a)func(iterable[i])形式:iterable的每个元素(元素本身也是iterable)对应func的多个参数。

multiprocessing.Pool(),starmap方法

multiprocessing.Pool(),starmap_async方法

(b)func(iterable1[i],iterable2[i],...)形式:每个iterable对应func的一个参数。

concurrent.futures.ProcesspoolExecutor(),map方法

pathos.multiprocessing.Processpool(),map方法

pathos.multiprocessing.Processpool(),imap方法

pathos.multiprocessing.Processpool(),uimap方法

pathos.multiprocessing.Processpool(),amap方法

pathos.pp.ParallelPool(),map方法

pathos.pp.ParallelPool(),amap方法

pathos.pp.ParallelPool(),imap方法

pathos.pp.ParallelPool(),uimap方法

3、按返回分类

(1)返回任务返回值

multiprocessing.Pool(),apply方法

pathos.multiprocessing.Processpool(),pipe方法

pathos.pp.ParallelPool(),pipe方法

(2)返回list

multiprocessing.Pool(),map方法

multiprocessing.Pool(),starmap方法

pathos.multiprocessing.Processpool(),map方法

pathos.pp.ParallelPool(),map方法

(3)返回ApplyResult

返回MapResult或ApplyResult实例,通过get方法获取返回值。需要注意的是:

由于每个ApplyResult实例对应单个子进程,其get方法本身是阻塞的,因此,在进程添加过程中不可包含get方法,而应在所有进程完成后,再一起调用get方法

对于MapResult不存在该问题,因为所有子进程只会一起返回一个MapResult实例。

包括

multiprocessing.Pool(),apply_async方法

pathos.multiprocessing.Processpool(),apipe方法

pathos.pp.ParallelPool(),apipe方法

(4)返回MapResult

multiprocessing.Pool(),map_async方法

multiprocessing.Pool(),starmap_async方法

pathos.multiprocessing.Processpool(),amap方法

pathos.pp.ParallelPool(),amap方法

(5)返回迭代器或生成

迭代器/生成器对内存的需求会小得多,但速度比普通方法要慢很多(未验证)。不过,对于本文的小型任务,看不出差别。

(a)按顺序:即按任务添加顺利返回。

multiprocessing.Pool(),imap方法

concurrent.futures.ProcesspoolExecutor(),map方法

pathos.multiprocessing.Processpool(),imap方法

pathos.pp.ParallelPool(),imap方法

(b)不按顺序:实际按任务完成顺序返回。

multiprocessing.Pool(),imap_unordered方法

pathos.multiprocessing.Processpool(),uimap方法

pathos.pp.ParallelPool(),uimap方法

(6)无直接返回值

multiprocessing.Process() #无直接返回值,可通过进程间通信的方式返回任务返回值。

concurrent.futures.ProcesspoolExecutor(),submit方法 #future对象可以通过result方法获取子进程任务返回值。但该方法是阻塞的,因此,应在所有子进程完成后再调用

pp.Server(),submit方法 #Task对象可调用(即Task()),调用可返回任务返回值。但调用是阻塞的,因此,应在所有子进程完成后再调用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐