從執行緒存取回傳值
當在 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中文網其他相關文章!