33a34,46 > from datetime import datetime > > class Clock(): > def __init__(self, label): > self.start = datetime.now() > self.label = label > > def stop(self, callback_type): > end = datetime.now() > total = (end - self.start).total_seconds() > if total > 0.1: > print('EXECUTING {}: {} {:.5f}'.format(callback_type, self.label, total)) > 195c208,221 < --- > import threading > import inspect > def identifyItem(i): > if i is None: > return "(None)" > else: > if inspect.isbuiltin(i): > return str(i) > else: > if 'gotResult' == i.__name__: > return False > f = inspect.getsourcefile(i) > ln = inspect.getsourcelines(i)[1] > return "%s (%s:%d)" % (str(i), f, ln) 588c614,624 < current.result = callback(current.result, *args, **kw) --- > currentItem = identifyItem(callback) > currentThreadId = threading.current_thread().ident > > if currentItem: > clock = Clock("%s in thread %d" % (currentItem, currentThreadId)) > try: > current.result = callback(current.result, *args, **kw) > finally: > if currentItem: > clock.stop('deferred') > 1123a1160,1161 > currentThreadId = threading.current_thread().ident > c = Clock("%s in thread %d" % (str(g.gi_code), currentThreadId)) 1175a1214,1215 > finally: > c.stop('inlineCallback')