python获取多线程的返回值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python获取多线程的返回值相关的知识,希望对你有一定的参考价值。

最近有个需求,用多线程比较合适,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装

import threading


class MyThread(threading.Thread):

    def __init__(self,func,args=()):
        super(MyThread,self).__init__()
        self.func = func
        self.args = args

    def run(self):
        self.result = self.func(*self.args)

    def get_result(self):
        try:
            return self.result  # 如果子线程不使用join方法,此处可能会报没有self.result的错误
        except Exception:
            return None


def foo(a,b,c):
    time.sleep(1)
    print a*2,b*2,c*2,
    return a*2,b*2,c*2

st = time.time()
li = []
for i in xrange(4):
    t = MyThread(foo,args=(i,i+1,i+2))
    li.append(t)
    t.start()

for t in li:
    t.join()  # 一定要join,不然主线程比子线程跑的快,会拿不到结果
    print t.get_result()

et = time.time()
print et - st

执行结果

0 2 4 (0, 2, 4)
4 6 8 2 4 6 (2, 4, 6)
(4, 6, 8)
6 8 10 (6, 8, 10)
1.00200009346

元组中的结果是函数foo的返回值,至于结果为什么这么乱,我猜,是因为各子线程foo的print和主线程print get_result()一起抢占系统资源造成。

 

以上是关于python获取多线程的返回值的主要内容,如果未能解决你的问题,请参考以下文章

python获取多线程的返回值

python多线程获取函数返回值

如何使用线程去执行一个 有返回值的方法,并获取返回值?

python通过多线程并获取返回值

android AsyncTask 怎么返回值给UI线程

android AsyncTask 怎么返回值给UI线程