欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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)

这个方法就是你具体线程要运行的

相关标签: python基础 python