python多线程多返回值
程序员文章站
2022-05-02 16:49:43
...
最近做了个批量执行任务的项目,写个记录一下.
在这里说个我写代码的习惯,尽量让自己的代码可以复用,将接口部分的代码和具体方法部分代码分开,最后就是配置文件,因为要经常切换测试环境和生产环境,所以加个配置文件能更好的分开代码,避免混淆.
接口部分代码
def demo():
req_json = request.get_data(as_text=True)
print("接收的参数为:" + req_json)
req_msg = json.loads(req_json)
data_list = req_msg['data']
num = len(data_list)
#有几组数据开几个线程,因为我需要写文件所以要有文件名
thread_list = []
for i in range(num):
name = "Hosts-"+str(i)
ip_user = data_list[i]
#线程和数据一一对应
thread = StateThread(fun, args=(name, ip_user))
thread_list.append(thread)
thread.start()
state_list = []
for i in thread_list:
i.join(30)#设置线程超时时间
state_list.append(i.get_result())#收集返回结果
return jsonify({
"errorCode": '1',
"data":{
'list':state_list
},
"error": ""
})
重写线程代码
class StateThread (threading.Thread):
def __init__(self, func, args=()):
threading.Thread.__init__(self)
self.func = func
self.args = args
def run(self):
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result
except Exception:
return None
方法代码
def fun(name, ip_user):
print ("开始线程:" + name)
time.sleep(10)
print ("退出线程:" + name)
return (name + ip_user)
这个方法就是你具体线程要运行的