def trace_func(self, func, *args, **kwargs):
"""
@note:替代profile_func,新的跟踪线程返回值的函数,对真正执行的线程函数包一次函数,以获取返回值
"""
ret = func(*args, **kwargs)
self.ret_flag += ret
这样就需要修改start方法中Thread函数的设置,代码如下:
def start(self):
"""
@note: 启动多线程执行,并阻塞到结束
"""
self.threads = []
self.ret_flag = 0
for func_dict in self.func_list:
if func_dict["args"]:
new_arg_list = []
new_arg_list.append(func_dict["func"])
for arg in func_dict["args"]:
new_arg_list.append(arg)
new_arg_tuple = tuple(new_arg_list)
t = threading.Thread(target=self.trace_func, args=new_arg_tuple)
else:
t = threading.Thread(target=self.trace_func, args=(func_dict["func"],))
self.threads.append(t)
for thread_obj in self.threads:
thread_obj.start()
for thread_obj in self.threads:
thread_obj.join()
这样能够成功获得返回值了,实验: