Python 并行分布式框架之 PP

jopen 9年前發布 | 20K 次閱讀 Python Python開發

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是一個輕量級的并行框架,代碼不多,安裝使用起來也比較簡單,并行方式是多進程,但是缺乏對任務的封裝,也缺少調度的功能。適合于構造簡單的并行分布式系統。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!