直接上代码。 python PP 下载, 可以到官网下载 Python PP 下载
lambda 能做的, 基本上普通函数都可以做到。 lambda 的主要作用是简化表达式, 并且似乎尤其适合于表达科学计算公式。 结合 map, reduce 等函数,可以获得更强大而“优雅”的表达能力。 这里的“优雅”并不一定表示易理解性,而常常是因为一句短小精炼的代码使得人眼前一亮。
以下代码演示 lambda 的用法及 python 并发编程。
importppfrommultiprocessingimportPRocess, Pool, PipedefaddNFunc(n):returnlambdax:x+ndeffac(n):ifn <= 1:return1returnreduce(lambdax,y: x*y, map(addNFunc(1), range(n)))defcomputingFacOfRange(begin, end):foriinmap(addNFunc(begin), range(end-begin+1)):printi,'! =', fac(i)defanother():print'another quick job'defQuadraticSum(n, m):'''compute 1^m + 2^m + ... + n^m'''ifn <= 1:return1returnreduce(lambdax,y: x+y**m, map(addNFunc(1), range(n)))defexpressQS(n,m):ifn <= 1:return'1'returnreduce(lambdax,y:"%s+%s"%(str(x),str(y)+'^'+str(m)), map(addNFunc(1), range(n)))defobtainQuadraticSum(n, m):return"%s=%s"%(expressQS(n, m), QuadraticSum(n,m))defobtainQuadraticSumByPipe(conn, n, m):
conn.send(obtainQuadraticSum(n, m))defprintQuadraticSum(n, m):printobtainQuadraticSum(n, m)deftestQuadraticSum():fornin[1,2,3,4,5]:formin[-1,1,2,3]:
printQuadraticSum(n, m)defusingPP():'''using pp module for python concurrent programming'''nworkers= 10ppservers=()
job_server= pp.Server(nworkers, ppservers=ppservers)print"Starting pp with", job_server.get_ncpus(),"workers"jobs=[]foriinrange(nworkers):
jobs.append(job_server.submit(computingFacOfRange, (i*10+1, (i+1)*10), (fac,addNFunc,)))
jobs.append(job_server.submit(another, ()))forjobinjobs:
job()
job_server.print_stats()defusingMultiprocess():'''using multiprocessing module for python concurrent programming'''num= 100processes=[]print'************ using original process ***********'input_conn, output_conn=Pipe()formin[-1,1,2,3]:
p= Process(target=obtainQuadraticSumByPipe, args=(input_conn, num,m,))
p.start()printoutput_conn.recv()print'------------- using Pool -------------'pool= Pool(processes=4)formin[-1,1,2,3]:
pool.apply(printQuadraticSum, (num,m))if__name__=='__main__':
testQuadraticSum()
usingPP()
usingMultiprocess()