美文网首页
利用进程池实现优雅的多核并行运算

利用进程池实现优雅的多核并行运算

作者: bdd1b3ad7323 | 来源:发表于2017-10-15 14:18 被阅读19次

先导入一下用到的包

from multiprocessing import Pool, cpu_count, Process, Queue

在不使用进程池的情况下,要想利用到多核运算,我们可能会写下如下代码

tasks = Queue()
# Put tasks into task queue
# ...

def task_func():
    # task function
    pass

pool = []

for _ in range(cpu_count()):
    p = Process(target=task_func)
    p.start()
    pool.append(p)
for p in pool:
    p.join()

使用进程池后,我们可以使用下面的代码完成并行计算

tasks = [(1, 1), (2, 3), (4, 7), (9, 10), (11, 23)]

def add(tup):
    return tup[0] + tup[1]

if __name__ == '__main__':
    pool = Pool(cpu_count())
    ans = pool.map(add, tasks)
    print(ans)

Pool类构造了一个进程池,Pool.map方法会自动的从池中抽取进程完成运算,并入池。这样,就隐藏了实现的细节,使我们不必在业务逻辑中掺入进程操作的代码。

一些坑

  • task function不能使用lambda表达式,下面的代码

    if __name__ == '__main__':
        pool = Pool(cpu_count())
        ans = pool.map(lambda tup: tup[0] + tup[1], tasks)
        pool.close()
        pool.join()
    

    会报错。

    _pickle.PicklingError: Can't pickle <function <lambda> at 0x000001FFC5823E18>: attribute lookup <lambda> on __main__ failed

  • 池的定义必须放到函数中而不是全局中,下面的代码

    tasks = [(1, 1), (2, 3), (4, 7), (9, 10), (11, 23)]
    pool = Pool(cpu_count())
    
    def add(tup):
        return tup[0] + tup[1]
    if __name__ == '__main__':
        ans = pool.map(add, tasks)
        print(ans)
    

    会报运行时错误

相关文章

  • 利用进程池实现优雅的多核并行运算

    先导入一下用到的包 在不使用进程池的情况下,要想利用到多核运算,我们可能会写下如下代码 使用进程池后,我们可以使用...

  • 2019-07-01 python 多核并行计算

    python 多核并行计算 Python中的并行运算

  • GCD 多线程

    GCD(Grand CentralDispatch) 优点: >1.利用多核进行并行运算 >2.自动充分使用设备的...

  • [OS] 进程管理 内存管理

    并发和并行 高并发: 提高了系统的利用率 并行: 多核计算机同时运行多个进程或线程, 提高了性能 进程和线程 进程...

  • python进程:一文学会multiprocessing的简单使

    在python里面要实现多核CPU并行,只能通过多进程方式实现。本文主要介绍multiprocessing实现多进...

  • python中的多线程多进程

    推荐文章 1. 多进程: 优势:可以充分地利用cpu的多核,实现真正的并行(尤其是在python这种带有GIL锁的...

  • GCD的理解与使用

    原文链接 GCD的特点 • GCD会自动利用更多的CPU内核• GCD 可用于多核的并行运算• GCD...

  • GCD基本用法大全

    GCD是Apple开发的一个多核编程的解决方案,他可以用于多核的并行运算,并自动利用更多的CPU内核,同时GCD会...

  • GCD基本用法大全

    GCD是Apple开发的一个多核编程的解决方案,他可以用于多核的并行运算,并自动利用更多的CPU内核,同时GCD会...

  • 多进程架构 child_process

    面对单进程单线程对多核使用不足的问题,理想状态下每个进程各自利用一个cpu,以此实现多核CPU的利用,nodejs...

网友评论

      本文标题:利用进程池实现优雅的多核并行运算

      本文链接:https://www.haomeiwen.com/subject/bwccuxtx.html