私がやりたいのは、複数のスレッドで関数を呼び出して、その結果を取得できるようにすることです。
私は次のコードを持っています:
(これは例です。実際のコードは単にstrをintに変換するだけではありません)
from threading import Thread
import time
import Queue
#an example - actual code connects to a server
def str_to_int(arg, queue):
result = 0
result = int(arg)
#sleep to check that they happen at once.
time.sleep(10)
queue.put(result)
def combine():
q1 = Queue.Queue()
q2 = Queue.Queue()
q3 = Queue.Queue()
t1 = Thread(target = str_to_int, args=("111", q1))
t2 = Thread(target = str_to_int, args=("222", q2))
t3 = Thread(target = str_to_int, args=("333", q3))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
return (q1.get(),q2.get(),q3.get())
print combine()
このコードは機能します。そして私は期待される結果を得る:
>>>
(111, 222, 333)
ただし、これを行うためのより良い方法が必要です。私は3つよりも多くのスレッドを使用する予定ですが、3つしか使用していなかったとしても、非常に醜いようです。
編集:どの結果がどのスレッドから来たのかを知る必要があります(つまり、関数に与えたパラメーター/引数から)