python编写的benchmark 代码,pythonbenchmark,#!/usr/bin/e


#!/usr/bin/env python# coding: utf-8"""small system Benchmark by jensdiemer.deused fak_test by Dookie alias Fritz Cizmarovhttp://www.python-forum.de/viewtopic.php?t=3355"""__version__ = "0.0.1"### History# v0.0.1#   - erste Versionimport timestart_time = time.time()import os, random, sys, operatorif sys.version_info[:2] < (2,2):    raise SystemError("need at least Version 2.2 of Python")rnd_mem_size    = 10000rnd_mem_count   = 100rnd_disk_size   = 1000rnd_disk_count  = 1000norm_disk_MBsize= 30norm_disk_count = 1000fak_num     = 100000class benchmark:    def __init__( self ):        self.rnd_mem_test()        self.rnd_disk_test()        self.fak_test()        print "="*80        print "complete test duration:"        print "%.2fsec" % (time.time() - start_time)        print "="*80    def print_process( self, i, total ):        "allg. Fortschrittanzeige"        i += 1        tresh = total / 10        if tresh == 0:            tresh = 1        if i % tresh == 0:            duration = time.time() - start_time            print "%3.i%% %4.i/%i  %.2fsec" % ( round(float(i)/total*100), i, total, duration)    def rnd_mem_test( self ):        print "Random-MEM Test"        print "-"*80        print "Creating %i random-Blocks with a Size of %iBytes" % ( rnd_mem_count, rnd_mem_size )        for i in range( rnd_mem_count ):            trash = [ chr( random.randint(0,255) ) for r in range(rnd_mem_size) ]            self.print_process(i, rnd_mem_count)    def rnd_disk_test( self ):        print        print "Random-DISK Test"        try:            testfile = file( "benchtest.tmp", "w" )        except Exception, e:            print "Can't create Testfile:",e            sys.exit(1)        print "-"*80        KBsize = rnd_disk_count * rnd_disk_size / 1024        print "Write %i random-Blocks à %iBytes (total %iKB)" % ( rnd_disk_count, rnd_disk_size, KBsize )        for i in range( rnd_disk_count ):            testfile.write(                    "".join( [ chr( random.randint(0,255) ) for r in range(rnd_disk_size) ] )                )            self.print_process(i, rnd_disk_count)        testfile.close()        testfile = file( "benchtest.tmp", "w" )        print "-"*80        print "Test Disk writing speed"        blockMBsize = norm_disk_MBsize * 1024        MBytes = blockMBsize * norm_disk_count / 1024 / 1024        print "Writes %iMBytes (NULL-Bytes)" % ( MBytes )        NULLblock = " " * blockMBsize        disk_start_time = time.time()        for i in xrange( norm_disk_count ):            testfile.write( NULLblock )            self.print_process( i, norm_disk_count )        disk_end_time = time.time()        testfile.close()        print "-"*80        print "%iMB/sec" % ( MBytes / ( disk_end_time-disk_start_time ) )        try:            # lösche Inhalt des Tempfile            testfile = file( "benchtest.tmp", "w" )            testfile.close()        except:            pass        try:            # Lösche Datei selber            os.remove( "benchtest.tmp" )        except Exception, e:            print "Can't delete Testfile:",e            sys.exit(1)    def fak_test( self ):        print        print "fak Test"        print "-"*80        def fak_recursive(n):            if n > 2:                return n * fak_recursive(n-1)            else:                return n        def fak_iter_while(n):            res = n            while n > 2:                n -= 1   # entspricht n = n - 1                res *= n # ginge auch als res = res * n            return res        def fak_iter_for(n):            res = n            for n in xrange(2,n):                res *= n            return res        fak_lambda = lambda n: reduce(operator.mul, xrange(2,n),n)        def test(funktion_name, f):            print "%16s: %d Berechnungen..." % (funktion_name, fak_num),            values = range(1,101)*(fak_num/100)            t_start = time.time()            for val in values:                tmp = f(val)            print "%.2fsec" % (time.time() - start_time)        test("fak_recursive", fak_recursive)        test("fak_iter_while", fak_iter_while)        test("fak_iter_for", fak_iter_for)        test("fak_lambda", fak_lambda)if __name__ == "__main__":    benchmark()

评论关闭