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中文網其他相關文章!