呼び出し元の関数が別のスレッドにあるメイン スレッドで関数を実行する可能性を知りたいです。
以下の例を検討してください
from thread import start_new_thread
def add(num1,num2):
res = num1 + num2
display(res)
def display(ans):
print ans
thrd = start_new_thread(add,(2,5))
ここで私はadd()
新しいスレッドを呼び出しています。display()
つまり、ディスプレイも同じスレッドで実行されています。
display()
そのスレッドの外で実行する方法を知りたいです。
以下の回答による新しいコード
ユーザーからの入力を受け入れて結果を出力しようとしている場合。入力を求めるのは 1 回だけですが、繰り返しではありません...
from threading import Thread # threading は thread モジュールよりも優れています from Queue import Queue
q = Queue() # キューを使用してワーカー スレッドからメイン スレッドにメッセージを渡す
def add():
num1=int(raw_input('Enter 1st num : '))
num2=int(raw_input('Enter 2nd num : '))
res = num1 + num2
# send the function 'display', a tuple of arguments (res,)
# and an empty dict of keyword arguments
q.put((display, (res,), {}))
def display(ans):
print ('Sum of both two num is : %d ' % ans)
thrd = Thread(target=add)
thrd.start()
while True: # a lightweight "event loop"
# ans = q.get()
# display(ans)
# q.task_done()
f, args, kwargs = q.get()
f(*args, **kwargs)
q.task_done()
コードを実行すると、結果は次のようになります
現在の結果
Enter 1st num : 5
Enter 2nd num : 6
Sum of both two num is : 11
必要な結果
Enter 1st num : 5
Enter 2nd num : 6
Sum of both two num is : 11
Enter 1st num : 8
Enter 2nd num : 2
Sum of both two num is : 10
Enter 1st num : 15
Enter 2nd num : 3
Sum of both two num is : 18
以下のように、毎回結果を印刷した後に入力を求める必要がある場所