首頁  >  文章  >  後端開發  >  python做平行計算可以嗎

python做平行計算可以嗎

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-06-19 11:06:113499瀏覽

python做平行計算可以嗎

python可以做並行計算,以下是相關介紹:

##一、概覽

Parallel Python是一個python模組,提供在SMP(具有多個處理器或多核心的系統)和叢集(透過網路連接的電腦)上並行執行python程式碼的機制。它輕巧,易於安裝和與其他python軟體整合。 Parallel Python是一個用純Python編寫的開源和跨平台模組。

二、特性

在SMP和叢集上並行執行python程式碼

易於理解和實作基於Job的並行化技術(易於並行轉換序列應用程式)

自動偵測最佳配置(預設工作進程數設定為有效處理器數)

動態處理器分配(工作進程數可以在運行時變更)

具有相同功能的後續作業的低開銷(實現透明高速緩存以減少開銷)

動態負載平衡(作業在運行時在處理器之間分佈)

容錯(如果其中一個節點發生故障,任務在其他節點上重新調度)

計算資源的自動發現

計算資源的動態分配(自動發現和容錯的結果)

網路連接的基於SHA的認證

跨平台可移植性和互通性(Windows,Linux,Unix,Mac OS X)

跨架構可移植性和互通性(x86,x86 -64等)

開源

相關推薦:《

python影片教學

三、動機

現在,用python編寫的軟體應用在許多應用程式中,包括業務邏輯,數據分析和科學計算。這與市場上的SMP電腦(多處理器或多核心)和叢集(電腦透過網路連接)的廣泛可用性一起創建了並行執行python程式碼的需求。 

為SMP電腦編寫並行應用程式的最簡單且常見的方法是使用執行緒。雖然,如果應用程式是計算綁定使用線程或線程python模組將不允許並行運行python字節碼。原因是python解釋器使用GIL(全域解釋器鎖定)進行內部記帳。這個鎖允許一次只執行一個python字節碼指令,即使在SMP計算機上。 

PP模組克服了這個限制,並提供了一種寫入平行python應用程式的簡單方法。內部ppsmp使用進程和IPC(進程間通訊)來組織並行計算。後者的所有細節和複雜性完全被照顧,應用程式只提交作業並檢索其結果(寫並行應用程式的最簡單的方法)。 

為了讓事情變得更好,用PP編寫的軟體並行工作,即使在透過本機網路或Internet連接的許多電腦上。跨平台可移植性和動態負載平衡允許PP即使在異質和多平台叢集上也能有效地並行運算。

四、安裝

任何平台:下載模組存檔並將其解壓縮到本機目錄。執行安裝腳本:python setup.py install 

Windows:下載並執行Windows安裝程式二進位。

五、範例

import math, sys, time
import pp
def isprime(n):
    """Returns True if n is prime and False otherwise"""
    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
    max = int(math.ceil(math.sqrt(n)))
    i = 2
    while i <= max:
        if n % i == 0:
            return False
        i += 1
    return True
def sum_primes(n):
    """Calculates sum of all primes below given integer n"""
    return sum([x for x in xrange(2,n) if isprime(x)])
print """Usage: python sum_primes.py [ncpus]
    [ncpus] - the number of workers to run in parallel, 
    if omitted it will be set to the number of processors in the system
"""
# tuple of all parallel python servers to connect with
ppservers = ()
#ppservers = ("10.0.0.1",)
if len(sys.argv) > 1:
    ncpus = int(sys.argv[1])
    # Creates jobserver with ncpus workers
    job_server = pp.Server(ncpus, ppservers=ppservers)
else:
    # Creates jobserver with automatically detected number of workers
    job_server = pp.Server(ppservers=ppservers)
print "Starting pp with", job_server.get_ncpus(), "workers"
# Submit a job of calulating sum_primes(100) for execution. 
# sum_primes - the function
# (100,) - tuple with arguments for sum_primes
# (isprime,) - tuple with functions on which function sum_primes depends
# ("math",) - tuple with module names which must be imported before sum_primes execution
# Execution starts as soon as one of the workers will become available
job1 = job_server.submit(sum_primes, (100,), (isprime,), ("math",))
# Retrieves the result calculated by job1
# The value of job1() is the same as sum_primes(100)
# If the job has not been finished yet, execution will wait here until result is available
result = job1()
print "Sum of primes below 100 is", result
start_time = time.time()
# The following submits 8 jobs and then retrieves the results
inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700)
jobs = [(input, job_server.submit(sum_primes,(input,), (isprime,), ("math",))) for input in inputs]
for input, job in jobs:
    print "Sum of primes below", input, "is", job()
print "Time elapsed: ", time.time() - start_time, "s"
job_server.print_stats()

以上是python做平行計算可以嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn