栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从python中的线程获取返回值?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从python中的线程获取返回值?

我见过的一种方法是将可变对象(例如列表或字典)与索引或某种其他标识符一起传递给线程的构造函数。然后,线程可以将其结果存储在该对象的专用插槽中。例如:

def foo(bar, result, index):    print 'hello {0}'.format(bar)    result[index] = "foo"from threading import Threadthreads = [None] * 10results = [None] * 10for i in range(len(threads)):    threads[i] = Thread(target=foo, args=('world!', results, i))    threads[i].start()# do some other stufffor i in range(len(threads)):    threads[i].join()print " ".join(results)  # what sound does a metasyntactic locomotive make?

如果你确实想join()返回被调用函数的返回值,则可以使用如下所示的Thread子类来实现:

from threading import Threaddef foo(bar):    print 'hello {0}'.format(bar)    return "foo"class ThreadWithReturnValue(Thread):    def __init__(self, group=None, target=None, name=None,      args=(), kwargs={}, Verbose=None):        Thread.__init__(self, group, target, name, args, kwargs, Verbose)        self._return = None    def run(self):        if self._Thread__target is not None: self._return = self._Thread__target(*self._Thread__args,    **self._Thread__kwargs)    def join(self):        Thread.join(self)        return self._returntwrv = ThreadWithReturnValue(target=foo, args=('world!',))twrv.start()print twrv.join()   # prints foo

由于名称修改,这有点麻烦,并且它访问特定于Thread实现的“私有”数据结构…但是它可以工作。

对于python3

class ThreadWithReturnValue(Thread):    def __init__(self, group=None, target=None, name=None,      args=(), kwargs={}, Verbose=None):        Thread.__init__(self, group, target, name, args, kwargs)        self._return = None    def run(self):        print(type(self._target))        if self._target is not None: self._return = self._target(*self._args,    **self._kwargs)    def join(self, *args):        Thread.join(self, *args)        return self._return


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号