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つの一般的な方法があり、状況に応じて適切な方法を選択できます。