首頁 >後端開發 >Python教學 >如何從 Python 線程檢索回傳值?

如何從 Python 線程檢索回傳值?

Barbara Streisand
Barbara Streisand原創
2024-12-17 06:10:26579瀏覽

How Can I Retrieve Return Values from Python Threads?

從執行緒存取回傳值

當在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn