# Using Jython 2.5.1 and Apache POI 3.11 from __future__ import with_statement import random import profile import marshal from java.io import File, FileOutputStream, BufferedOutputStream from org.apache.poi.ss.usermodel import WorkbookFactory filename = '53446.xls' wb = WorkbookFactory.create(File('C:\\temp\\'+filename)) #modify the workbook wb.createSheet('a new sheet') def save_local_unbuffered(wb, filename): fos = FileOutputStream('C:\\temp\\'+filename) wb.write(fos) fos.close() def save_local_buffered(wb, filename): fos = FileOutputStream('C:\\temp\\'+filename) bos = BufferedOutputStream(fos) wb.write(bos) bos.close() fos.close() def save_network_unbuffered(wb, filename): fos = FileOutputStream('Q:\\temp\\'+filename) wb.write(fos) fos.close() def save_network_buffered(wb, filename): fos = FileOutputStream('Q:\\temp\\'+filename) bos = BufferedOutputStream(fos) wb.write(bos) bos.close() fos.close() def main(): trials = 30 save_funcs = [save_local_unbuffered, save_local_buffered, save_network_unbuffered, save_network_buffered]*trials random.shuffle(save_funcs) for i, save in enumerate(save_funcs): print('Running %d: %s' % (i, save.__name__)) save(wb, '%s %d.xls' % (filename, i)) pstatsfile = 'C:\\temp\\results.pstats' profile.run('main()', 'C:\\temp\\results.pstats') def pstats2csv(pstatsfile): with open(pstatsfile, 'r') as p: k = marshal.loads(p.read()) with open(pstatsfile+'.csv', 'w') as csv: csv.write('"ncalls", "tottime", "cumtime", "function", "location"%s' % "\n") for func, (cc, nc, tt, ct, callers) in k.iteritems(): csv.write('%d, %f, %f, "%s", "%s:%d", %s' % (nc, tt, ct, func[-1], func[0], func[1], "\n")) pstats2csv(pstatsfile)