从线程访问返回值
当在 Python 中创建线程时,它们的目标函数可能会返回一个值。然而,使用标准方法从主线程检索此返回值并不简单。
一种选择是将可变对象(例如列表或字典)传递给线程并将结果存储在指定的槽中。此方法需要向线程传递额外的参数并维护线程和对象之间的连接。
另一种方法是子类化 Thread 类并重写 run 和 join 方法。在重写的 run 方法中,目标函数的返回值存储在子类内的私有属性中。重写的 join 方法返回存储在此属性中的值。
这是使用 ThreadWithReturnValue 子类的示例:
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): 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
要使用此子类:
twrv = ThreadWithReturnValue(target=foo, args=('world!',)) twrv.start() print(twrv.join()) # prints 'foo'
而这种方法是有效的,它需要自定义Thread类,这可能并不适用于所有场景。最终,最佳方法取决于应用程序的具体需求和要求。
以上是如何从 Python 线程检索返回值?的详细内容。更多信息请关注PHP中文网其他相关文章!