Python 并行分布式框架之 PP

jopen 8年前

PP (Parallel Python)是基于Python的一个轻量级的,提供在SMP(多处理器或者多核系统)或者集群环境中并行执行Python代码的机制。

最简单和最常见的并行方式是使用多线程,然而如果应用程序使用Python提供的线程库, 它实际上并不能并行的运行Python的字节码(Byte-Code)。这是因为Pyton解释器使用GIL(全局解释器锁),这样的机制是的在同一时间,即使是多核的机器,也只能运行一个字节码指令。PP试图克服这样的限制,提供一种更简单的方式来编写并行应用。PP采用了多进程和进程间通信来处理并发,并隐藏所有的实现细节,使得其容易使用。

功能介绍

  • 并行运行Python代码(废话)

  • 易于理解的基于任务(Job)的并行技术

  • 自动检测优化配置

  • 动态处理器分配

  • 负载均衡

  • 容错

  • 自动发现和动态分配计算资源

  • 基于SHA的网络连接认证

  • 跨平台(Windows,Linux, Unix, Mac OS)和架构(X86,X86-64)支持

  • 开源 (BSD)

安装

wget    tar -xvf pp-1.6.4.tar.gz  cd pp-1.6.4  sudo python setup.py install

架构和设计

Server

PP server 包含并管理多个worker并行的执行客户端发送的任务

Client

客户端负责发送任务(Python Function)到服务器

Cluster

多个PP Server可以构成一个PP Cluster,在CLuster模式客户端提交任务到Cluster,cluster 找到合适的Server来运行任务。

使用方式

SMP

在SMP的模式下使用PP非常简单

import pp  # create a job serer  job_server = pp.Server()    # submit some jobs with python functions  f1 = job_server.submit(func1, args1, depfuncs1, modules1)  f2 = job_server.submit(func1, args2, depfuncs1, modules1)  f3 = job_server.submit(func2, args3, depfuncs2, modules2)    # Get result from each jobs  r1 = f1()  r2 = f2()  r3 = f3()

Cluster

在Cluster模式下,需要在不同的节点运行ppserver

node-1> ./ppserver.py  node-2> ./ppserver.py  node-3> ./ppserver.py

客户端代码和SMP模式类似

import pp    # create cluster  ppservers=("node-1", "node-2", "node-3")    # create a job serer  pp.Server(ppservers=ppservers)     # submit some jobs with python functions  f1 = job_server.submit(func1, args1, depfuncs1, modules1)  f2 = job_server.submit(func1, args2, depfuncs1, modules1)  f3 = job_server.submit(func2, args3, depfuncs2, modules2)    # Get result from each jobs  r1 = f1()  r2 = f2()  r3 = f3()


总结

PP是一个轻量级的并行框架,代码不多,安装使用起来也比较简单,并行方式是多进程,但是缺乏对任务的封装,也缺少调度的功能。适合于构造简单的并行分布式系统。