Parallel Python 并行计算(PP)

本文将介绍Python分布式并行编程模块Parallel python (简称PP), pp-1.6.4.4的使用。

PP是一个python模块,提供在SMP(多处理器或多核)和集群(通过网络连接的计算机)上并行执行python代码的机制。

PP模块克服了GIL(全局解释器锁)这个限制,并提供了一种写并行python应用程序的简单方法。内部ppsmp使用进程和IPC(进程间通信)来组织并行计算。后者的所有细节和复杂性完全被隐藏,应用程序只需负责提交作业并检索其结果(写并行应用程序的最简单的方法)。 跨平台可移植性和动态负载平衡允许PP即使在异构和多平台集群上也能有效地并行计算。

目     录


1、安装

2、特点

3、PP的运行模式

 4、使用示例

5、类似模块


1、安装

 1、pip安装

 # pip install pp

2、源码安装

# tar -xvzf pp-xxx.tar.gz

# python setup.py install

2、特点

  1. 在SMP和集群上并行执行python代码
  2. 易于理解和实现基于Job的并行化技术(易于并行转换串行应用程序)
  3. 自动检测最佳配置(默认情况下工作进程数设置为有效处理器数)
  4. 动态处理器分配(工作进程数可以在运行时更改)
  5. 具有相同功能的后续作业的低开销(实现透明高速缓存以减少开销)
  6. 动态负载平衡(作业在运行时在处理器之间分布)
  7. 容错(如果其中一个节点发生故障,任务在其他节点上重新调度)
  8. 计算资源的自动发现
  9. 计算资源的动态分配(自动发现和容错的结果)
  10. 网络连接的基于SHA的认证
  11. 跨平台可移植性和互操作性(Windows,Linux,Unix,Mac OS X)
     

3、PP的运行模式

主要分为下面2种方式。

1、本地模式

 利用cpu多核多进程,代码方式:

import pp

job_server = pp.Server(cpu核心数)

job = job_server.submit(工作函数,入参,相关函数,相关引用模块)
job()

2、集群模式

创建代码并分发worker执行任务返回执行结果。需要在各个节点安装pp包,并在不同的节点运行ppserver。运行方式:python ppserver.py -p 9696 -s 123 -w 2

各参数含义:-p:通信的端口号, -s:密码  -w:cpu核心数

#python ppserver.py -p 9696 -s 123 -w 2
workers = (host1:9696,host2:9696,...)
job_server = pp.Server(ppservers=workers, secret='123')
job = job_server.submit(工作函数,入参,相关函数,相关引用模块)
job()

一般是master-worker架构形式:

4、使用示例

1、单机模式

建立pp_test.py(该代码引用自网络):

import pp
import math
import time

def isprime(n):
    if not isinstance(n, int):
        raise TypeError("argument passed to is_prime is not of 'int' type")
    if n < 2:
        return False

    if n == 2:
        return True

    maxvalue = int(math.ceil(math.sqrt(n)))
    i = 2
    while i <= maxvalue:
        if n % i == 0:
            return False
        i += 1
        return True


def sum_primes(n):
    return sum([x for x in range(2,n) if isprime(x)])

if __name__ == "__main__":
    job_server = pp.Server()
    print("***并行计算***")
    t1 = time.time()
    f1 = job_server.submit(sum_primes, (100000,), (isprime,), ("math",))
    f2 = job_server.submit(sum_primes, (100100,), (isprime,), ("math",))
    f3 = job_server.submit(sum_primes, (100200,), (isprime,), ("math",))
    f4 = job_server.submit(sum_primes, (100300,), (isprime,), ("math",))
    a = f1()
    b = f2()
    c = f3()
    d = f4()
    t2 = time.time()
    print(str(t2-t1),a,b,c,d)

5、类似模块

1、Python的multiprocessing模块不但支持多进程,其中的managers子模块还支持把多进程分布到多台机器上。

2、基于Python的分布式执行引擎 Ray 

     相比python原生的multiprocess和multithreading,Rag使用起来更简单强大。


参考:https://www.parallelpython.com

参考:https://blog.csdn.net/wangshuang1631/article/details/53196137/

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值