美文网首页python自学
python获取多线程线程执行结果

python获取多线程线程执行结果

作者: __Brick__ | 来源:发表于2018-10-02 00:32 被阅读2次

    python的threading模块有提供多线程的执行方法,在计算密集型操作里也用不上,很多时候是在处理IO密集型的操作里使用,能为我们节省不少时间,但他本身不提供获取线程执行结果,需要我们自行实现,目前最简单的办法就是使用Queue来实现,Queue在线程之间是共享的,并且本身就提供了良好的加锁机制,可以直接使用。

    首先简单封装下threading模块,取名为mythreading.py:

    # coding=utf-8
    # python2适用 python3可能略有不同,请自行修改
    
    import threading
    
    class MyMutiThread():
        def __init__(self):
            self.runlist = list()
    
        def muti_thread_add(self, func, name, *args, **kwargs):
            t = threading.Thread(target=func, name=name, args=args, kwargs=kwargs)
            self.runlist.append(t)
    
        def muti_thread_start(self):
            for t in self.runlist:
                t.start()
    
        def muti_thread_wait(self):
            for t in self.runlist:
                t.join()
    

    接下来具体实现多线程的方法:

    # coding=utf-8
    
    import Queue
    import mythreading
    
    def my_function(arg1):
        '''你的操作'''
        time.sleep(1)  #模拟你的操作
        result = "执行结果"
        result_q.put(result)
    
    if __name__ == '__main__':
        # 开始处理并发
        result_q = Queue.Queue()   # 创建队列记录线程执行结果
        test_muti_thread = mythreading.MyMutiThread()
        test_muti_thread.muti_thread_add(my_function, "my_thread_name1", "arg1", result_q)
        test_muti_thread.muti_thread_add(my_function, "my_thread_name2", "arg2", result_q)
        test_muti_thread.muti_thread_start()
        test_muti_thread.muti_thread_wait()   # 等待执行完成
        result = list()
        while not result_q.empty():   # 校验执行结果
            result.append(result_q.get())
        print(result)   #获得结果
    

    相关文章

      网友评论

        本文标题:python获取多线程线程执行结果

        本文链接:https://www.haomeiwen.com/subject/pofnoftx.html