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

 

posted on 2013-02-05 20:51  |残阳|露  阅读(574)  评论(0编辑  收藏  举报

导航