def bind(self,id,imports=[]):
def bind_decorator(func):
def func_wrapper(*args, **kwargs):
t_overhead1 = time.clock()
instrumented = False
try:
t1 = time.clock()
v = func(*args, **kwargs)
t2 = time.clock()
except Exception as e:
# record bad input
bad_input = {"args":Binary(dill.dumps(args)), "snippet_id":id, "time":datetime.now(),
"exception_type":type(e).__name__, "exception":Binary(dill.dumps(e))}
self.cache.record_bug(bad_input)
raise e
if random.randint(0,func_wrapper.called) == 0:
instrumented = True
params = tuple(list(args)+[v])
sig = " -> ".join([util.pp_type(x) for x in util.fancy_type(params).__tuple_params__])
# args_ = [a if type(a).__name__ != 'generator' else type(a) for a in args]
# v_ = v if type(v).__name__ != 'generator' else type(v)
#if sys.getsizeof(args) < self.max_obj_size and sys.getsizeof(v) < self.max_obj_size and not type(v).__name__ == 'generator':
if not type(v).__name__ == 'generator':
runtime = {"snippet_id":id, "call":Binary(dill.dumps((args,v))),"time_running":t2-t1,"file":__file__,
"user":self.user,"time":datetime.now(),"type":sig, "imports":imports}
if sys.getsizeof(runtime["call"]) < self.max_obj_size:
self.cache.record_call(runtime)
func_wrapper.called += 1
t_overhead2 = time.clock()
if self.overhead: self.overhead_call.append({"id":id,"meta_time":t_overhead2-t_overhead1,"normal_time":t2-t1, "inst":instrumented})
return v
func_wrapper.called = 0
return func_wrapper
return bind_decorator
评论列表
文章目录