from cStringIO import StringIO import timing, commands, os from sys import argv def method1(): out_str = '' for num in xrange(loop_count): out_str += `num` ps_stats() return out_str def method2(): from UserString import MutableString out_str = MutableString() for num in xrange(loop_count): out_str += `num` ps_stats() return out_str def method3(): from array import array char_array = array('c') for num in xrange(loop_count): char_array.fromstring(`num`) ps_stats() return char_array.tostring() def method4(): str_list = [] for num in xrange(loop_count): str_list.append(`num`) out_str = ''.join(str_list) ps_stats() return out_str def method5(): file_str = StringIO() for num in xrange(loop_count): file_str.write(`num`) out_str = file_str.getvalue() ps_stats() return out_str def method6(): out_str = ''.join([`num` for num in xrange(loop_count)]) ps_stats() return out_str def ps_stats(): global process_size ps = commands.getoutput('ps -up ' + `pid`) process_size = ps.split()[15] def call_method(num): global process_size timing.start() z = eval('method' + str(num))() timing.finish() print "method", num print "time", float(timing.micro()) / 1000000 print "output size ", len(z) / 1024, "kb" print "process size", process_size, "kb" print loop_count = 100000 pid = os.getpid() if len(argv) == 2: call_method(argv[1]) else: print "Usage: python stest.py \n" \ " where n is the method number to test"