我以前是一个只使用Matlab的用户,现在正在自学Python。我现在正在学习如何使用Python的并行处理。Matlab的并行编程在很大程度上主要是通过一个命令来执行的:parfor。很简单。
Python中的可用选项似乎比Matlab中的多得多。这是压倒性的。例如,在multiprocessing包中,我找到了Pool和Process类,每个类都允许使用几个参数和选项。
鉴于我是python的新手,而且我是自学的,有人会花几分钟时间解释一下Pool和Process之间的总体区别吗?在什么情况下使用Pool比使用Process更合适
对于上下文:我目前的编程工作要求我并行化一个输出数据向量的函数。这个函数接受几个参数,但本质上是一个for循环,我想并行运行它。
非常感谢您的帮助!
发布于 2019-09-08 20:48:33
multiprocessing模块的Process类用于在单独的Python进程中运行Python callable (实现了__call__方法/协议的函数或类实例),从而并行执行callable。示例:
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()如池的文档中所述:
它支持带有超时和回调的异步结果,并且有一个并行的映射实现。
希望这能对你有所帮助。
https://stackoverflow.com/questions/57841766
复制相似问题