Thanks for sharing! -joe
-- Joe Gregorio Developer Relations, Google Wave 2010/6/11 Raphaël Pinson <[email protected]>: > Hi guys, > I thought this might be useful for some of you, although I'm sure it could > be made a bit cleaner. Here is how I profile my Wave bot: > > > def OnWaveletSelfAdded(event, wavelet): > blah > def OnBlipSubmitted(event, wavelet): > blah > def OnDocumentChanged(event, wavelet): > blah > def OnGadgetStateChanged(event, wavelet): > blah > def profileEvent(event, wavelet): > """Run OnDocumentChanged with profiling""" > import cProfile, pstats, StringIO > prof = cProfile.Profile() > if event.type == "WAVELET_SELF_ADDED": > prof = prof.runctx("OnWaveletSelfAdded(event, wavelet)", globals(), > locals()) > elif event.type == "BLIP_SUBMITTED": > prof = prof.runctx("OnBlipSubmitted(event, wavelet)", globals(), > locals()) > elif event.type == "DOCUMENT_CHANGED": > prof = prof.runctx("OnDocumentChanged(event, wavelet)", globals(), > locals()) > elif event.type == "GADGET_STATE_CHANGED": > prof = prof.runctx("OnGadgetStateChanged(event, wavelet)", globals(), > locals()) > stream = StringIO.StringIO() > stats = pstats.Stats(prof, stream=stream) > stats.sort_stats("time") # Or cumulative > stats.print_stats(80) # 80 = how many to print > # The rest is optional. > # stats.print_callees() > # stats.print_callers() > logging.info("Profile data:\n%s", stream.getvalue()) > > if __name__ == '__main__': > myRobot = robot.Robot(BOT_NAME, image_url=IMAGE_URL, > profile_url=PROFILE_URL) > # Set this variable to enable/disable profiling > profiling = True > if profiling: > myRobot.register_handler(events.WaveletSelfAdded, profileEvent) > myRobot.register_handler(events.BlipSubmitted, profileEvent) > myRobot.register_handler(events.DocumentChanged, profileEvent) > myRobot.register_handler(events.GadgetStateChanged, profileEvent) > else: > myRobot.register_handler(events.WaveletSelfAdded, OnWaveletSelfAdded) > myRobot.register_handler(events.BlipSubmitted, OnBlipSubmitted) > myRobot.register_handler(events.DocumentChanged, OnDocumentChanged) > myRobot.register_handler(events.GadgetStateChanged, > OnGadgetStateChanged) > # Run robot > appengine_robot_runner.run(myRobot) > > > The downside of this method is that you have to register the callbacks > twice, but at least you can turn profiling on and off very easily. The > results of the profiling are shown in the logs. > > > Raphaël > > > -- > You received this message because you are subscribed to the Google Groups > "Google Wave API" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-wave-api?hl=en. > -- You received this message because you are subscribed to the Google Groups "Google Wave API" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-wave-api?hl=en.
