ParallelPython是Python进行分布式计算的开源模块,能够将计算压力分布到多核CPU或集群的多台计算机上,能够非常方便的在内网中搭建一个自组织的分布式计算平台。先从多核计算开始,普通的Python应用程序只能够使用一个CPU进程,而通过ParallelPython能够很方便的将计算扩展到多个CPU进程中
示例代码:
#!/usr/bin/python#File:sum_primes.py#Author:VItaliiVanovschi#Desc:Thisprogramdemonstratesparallelcomputationswithppmodule#Itcalculatesthesumofprimenumbersbelowagivenintegerinparallel#ParallelPythonSoftware:https://www.parallelpython.comimportmath,sys,timeimportppdefisprime(n):"""ReturnsTrueifnisprimeandFalseotherwise"""ifnotisinstance(n,int):raiseTypeError("argumentpassedtois_primeisnotof'int'type")ifn<2:returnFalseifn==2:returnTruemax=int(math.ceil(math.sqrt(n)))i=2whilei<=max:ifn%i==0:returnFalsei+=1returnTruedefsum_primes(n):"""Calculatessumofallprimesbelowgivenintegern"""returnsum([xforxinxrange(2,n)ifisprime(x)])print"""Usage:pythonsum_primes.py[ncpus][ncpus]-thenumberofworkerstoruninparallel,ifomitteditwillbesettothenumberofprocessorsinthesystem"""#tupleofallparallelpythonserverstoconnectwithppservers=()#ppservers=("10.0.0.1",)iflen(sys.argv)>1:ncpus=int(sys.argv[1])#Createsjobserverwithncpusworkersjob_server=pp.Server(ncpus,ppservers=ppservers)else:#Createsjobserverwithautomaticallydetectednumberofworkersjob_server=pp.Server(ppservers=ppservers)print"Startingppwith",job_server.get_ncpus(),"workers"#Submitajobofcalulatingsum_primes(100)forexecution.#sum_primes-thefunction#(100,)-tuplewithargumentsforsum_primes#(isprime,)-tuplewithfunctionsonwhichfunctionsum_primesdepends#("math",)-tuplewithmodulenameswhichmustbeimportedbeforesum_primesexecution#Executionstartsassoonasoneoftheworkerswillbecomeavailablejob1=job_server.submit(sum_primes,(100,),(isprime,),("math",))#Retrievestheresultcalculatedbyjob1#Thevalueofjob1()isthesameassum_primes(100)#Ifthejobhasnotbeenfinishedyet,executionwillwaithereuntilresultisavailableresult=job1()print"Sumofprimesbelow100is",resultstart_time=time.time()#Thefollowingsubmits8jobsandthenretrievestheresultsinputs=(100000,100100,100200,100300,100400,100500,100600,100700)jobs=[(input,job_server.submit(sum_primes,(input,),(isprime,),("math",)))forinputininputs]forinput,jobinjobs:print"Sumofprimesbelow",input,"is",job()print"Timeelapsed:",time.time()-start_time,"s"job_server.print_stats()#ParallelPythonSoftware:https://www.parallelpython.com
评论