Parallel Python 并行开发多核心并行程序(例子2)
#-*- coding: UTF-8 -*- #------------------------------------------------------------------------------- # Name: # Purpose: # # Author: ankier # # Created: 05-02-2013 # Copyright: (c) ankier 2013 # Licence: <your licence> #------------------------------------------------------------------------------- import math,sys, md5, time import pp def md5Test(hash, start, end): for x in xrange(start, end): if md5.new(str(x)).hexdigest() == hash: return x ppservers = () job_server = pp.Server(ppservers=ppservers) print '当前工作核心工作进程数', job_server.get_ncpus(), "workers" hash = md5.new("1829182").hexdigest() print "hash =", hash start_time = time.time() rr = md5Test(hash, 1, 2000000) print '单线程耗时',time.time() - start_time, 's', 'Result =', rr start_time = time.time() start = 1 end = 2000000 parts = 128 step = (end - start) / parts + 1 jobs = [] for index in xrange(parts): starti = start+index*step endi = min(start+(index+1)*step, end) jobs.append(job_server.submit(md5Test, (hash, starti, endi), (), ("md5",))) for job in jobs: result = job() if result: break # Print the results if result: print "Reverse md5 for", hash, "is", result else: print "Reverse md5 for", hash, "has not been found" print "Time elapsed: ", time.time() - start_time, "s" job_server.print_stats()
运行结果:
当前工作核心工作进程数 4 workers hash = 48ae4d2d384dcc470e471f4169daa96a 单线程耗时 3.34699988365 s Result = 1829182 Reverse md5 for 48ae4d2d384dcc470e471f4169daa96a is 1829182 Time elapsed: 1.55399990082 s Job execution statistics: job count | % of all jobs | job time sum | time per job | job server 122 | 100.00 | 5.4470 | 0.044648 | local Time elapsed since server creation 4.90199995041 3 active tasks, 4 cores