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)
安装
1wget 2tar -xvf pp-1.6.4.tar.gz 3cd pp-1.6.4 4sudo python setup.py install
架构和设计

Server
PP server 包含并管理多个worker并行的执行客户端发送的任务
Client
客户端负责发送任务(Python Function)到服务器
Cluster
多个PP Server可以构成一个PP Cluster,在CLuster模式客户端提交任务到Cluster,cluster 找到合适的Server来运行任务。
使用方式
SMP
在SMP的模式下使用PP非常简单
1import pp 2# create a job serer 3job_server = pp.Server() 4 5# submit some jobs with python functions 6f1 = job_server.submit(func1, args1, depfuncs1, modules1) 7f2 = job_server.submit(func1, args2, depfuncs1, modules1) 8f3 = job_server.submit(func2, args3, depfuncs2, modules2) 9 10# Get result from each jobs 11r1 = f1() 12r2 = f2() 13r3 = f3()
Cluster
在Cluster模式下,需要在不同的节点运行ppserver
1node-1> ./ppserver.py 2node-2> ./ppserver.py 3node-3> ./ppserver.py
客户端代码和SMP模式类似
1import pp 2 3# create cluster 4ppservers=("node-1", "node-2", "node-3") 5 6# create a job serer 7pp.Server(ppservers=ppservers) 8 9# submit some jobs with python functions 10f1 = job_server.submit(func1, args1, depfuncs1, modules1) 11f2 = job_server.submit(func1, args2, depfuncs1, modules1) 12f3 = job_server.submit(func2, args3, depfuncs2, modules2) 13 14# Get result from each jobs 15r1 = f1() 16r2 = f2() 17r3 = f3()
总结
PP是一个轻量级的并行框架,代码不多,安装使用起来也比较简单,并行方式是多进程,但是缺乏对任务的封装,也缺少调度的功能。适合于构造简单的并行分布式系统。