Python 并行分布式框架之 PP
PP (Parallel Python)是基于Python的一個輕量級的,提供在SMP(多處理器或者多核系統)或者集群環境中并行執行Python代碼的機制。
最簡單和最常見的并行方式是使用多線程,然而如果應用程序使用Python提供的線程庫, 它實際上并不能并行的運行Python的字節碼(Byte-Code)。這是因為Pyton解釋器使用GIL(全局解釋器鎖),這樣的機制是的在同一時間,即使是多核的機器,也只能運行一個字節碼指令。PP試圖克服這樣的限制,提供一種更簡單的方式來編寫并行應用。PP采用了多進程和進程間通信來處理并發,并隱藏所有的實現細節,使得其容易使用。
功能介紹
-
并行運行Python代碼(廢話)
</li> -
易于理解的基于任務(Job)的并行技術
</li> -
自動檢測優化配置
</li> -
動態處理器分配
</li> -
負載均衡
</li> -
容錯
</li> -
自動發現和動態分配計算資源
</li> -
基于SHA的網絡連接認證
</li> -
跨平臺(Windows,Linux, Unix, Mac OS)和架構(X86,X86-64)支持
</li> -
開源 (BSD)
</li> </ul>安裝
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()</pre>
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()</pre>
總結
PP是一個輕量級的并行框架,代碼不多,安裝使用起來也比較簡單,并行方式是多進程,但是缺乏對任務的封裝,也缺少調度的功能。適合于構造簡單的并行分布式系統。