Pythonでマルチスレッドを使用して返り値を取得する方法

Pythonでは、マルチスレッドを実装するために threading モジュールを使用できる。ただし、マルチスレッドではスレッドは並行して実行されるため、スレッドの戻り値を直接取得することはできない。

一种常见的方法是使用threading.Thread的join()方法等待线程执行完成,然后使用共享变量或者队列来获取返回值。

共有変数を使用する例を以下に示します。

import threading

def my_function(result):
    # 执行一些操作
    result.append("Hello, World!")

result = []
t = threading.Thread(target=my_function, args=(result,))
t.start()
t.join()

print(result[0])

この例では、共有変数リスト`result`を引数として受け取り、関数内でそのリストに結果を追加する`my_function`関数を定義しています。

その後にスレッドtを作成し、target関数としてmy_functionを、その関数に引数としてresultを渡して呼び出した。

その後、スレッドtを起動し、t.join()メソッドでスレッドの実行完了を待機します。その後、result[0]からスレッドの戻り値を取得できます。

共有変数を用いる以外に、queue.Queue を用いることも、スレッドの戻り値の取得を実現できる。以下はキューを利用した例である。

import threading
import queue

def my_function(queue):
    # 执行一些操作
    queue.put("Hello, World!")

q = queue.Queue()
t = threading.Thread(target=my_function, args=(q,))
t.start()
t.join()

result = q.get()
print(result)

この例では、my_functionという関数定義し、この関数はキューqueueをパラメータとして受け取り、関数内でqueue.put()メソッドを使用して結果をキューの中に入れています。

そして、スレッド t を作ってターゲット関数に my_function を渡し、q を引数としてその関数に渡します。

その後スレッドtを起動させ、スレッドのjoin()メソッドを使って実行完了まで待機する。その後、q.get()によってスレッドの戻り値が得られる。

マルチスレッドの戻り値を取得するための2つの一般的な方法があり、状況に応じて適切な方法を選択できます。

bannerAds