Python 中的并行/多处理



我以前是Matlab的自学Python用户。 我现在正在学习如何使用Python的并行处理。 在大多数情况下,Matlab 的并行编程主要通过单个命令执行:parfor。简单。

Python中似乎比Matlab中有更多的选项。 这是压倒性的。 例如,在multiprocessing包中,我找到了PoolProcess类,每个类都允许多个参数和选项。

鉴于我是 python 的新手,而且我正在自学,有人会花几分钟来解释PoolProcess之间的大局区别吗? 什么时候使用Pool更合适Process

对于上下文:我目前的编程工作要求我并行化输出数据向量的函数。这个函数接受几个参数,但本质上是一个我想并行运行的 for 循环。

非常感谢您的帮助!

多处理模块的Process类旨在在单独的Python进程中运行Python可调用对象(具有实现__call__方法/协议的函数或类实例(,从而并行执行可调用对象。例:

import time
import multiprocessing

def stall(secs: int):
time.sleep(secs)
print('Slept for', secs, 'seconds')

if __name__ == '__main__':
# create process which will be executed in parallel
proc = multiprocessing.Process(target=stall, args=(2,))
# start parallel process execution
proc.start()
# execute code in main process...
print('I am in main process')
# wait for parallel executed process to finish
proc.join()

Pool表示此类工作器/进程的集合。池中的工作器数量由类构造函数的processes参数设置(默认情况下它等于os.cpu_count()返回的值(。因此,如果要并行执行不同的函数或具有不同参数的同一函数,则可以使用工作线程池,而不是手动创建进程。例:

import time
import multiprocessing

def stall(secs: int):
time.sleep(secs)
print('Slept for', secs, 'seconds')

if __name__ == '__main__':
# create pool of parallel executed workers
pool = multiprocessing.Pool()
# call the 'stall' function in parallel with different arguments
for secs in (3, 2, 4, 1):
pool.apply_async(stall, (secs,))
# or just apply parallel version of the 'map' function
# pool.map_async(stall, (3, 2, 4, 1))
# close the pool of workers
pool.close()
# execute code in main process...
print('I am in main process')
# wait for all processes in the pool to finish
pool.join()

如池文档中所述:

它支持具有超时和回调的异步结果,并具有 并行映射实现。

希望这会有所帮助。

相关内容

  • 没有找到相关文章

最新更新