首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中的并行/多处理

python中的并行/多处理
EN

Stack Overflow用户
提问于 2019-09-08 20:00:34
回答 1查看 216关注 0票数 1

我以前是一个只使用Matlab的用户,现在正在自学Python。我现在正在学习如何使用Python的并行处理。Matlab的并行编程在很大程度上主要是通过一个命令来执行的:parfor。很简单。

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

鉴于我是python的新手,而且我是自学的,有人会花几分钟时间解释一下PoolProcess之间的总体区别吗?在什么情况下使用Pool比使用Process更合适

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

非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2019-09-08 20:48:33

multiprocessing模块的Process类用于在单独的Python进程中运行Python callable (实现了__call__方法/协议的函数或类实例),从而并行执行callable。示例:

代码语言:javascript
复制
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()返回的值)。因此,如果您希望并行执行不同的函数或具有不同参数的相同函数,您可以使用工作线程池,而不是手动创建进程。示例:

代码语言:javascript
复制
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()

如池的文档中所述:

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

希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57841766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档