Pythonのスレッディングを使用して、同時に入力と出力を行う方法について説明します。この記事では、スレッドからの戻り値の取得方法と、異なるスレッドでの入力と出力の同時実行について説明します。
スレッドからの戻り値の取得
Pythonのスレッドから戻り値を取得する一つの方法は、スレッドのコンストラクタに可変オブジェクト(リストや辞書など)を渡し、スレッドがそのオブジェクトの専用スロットに結果を格納するようにすることです。
def foo(bar, result, index):
print('hello {0}'.format(bar))
result[index] = "foo"
from threading import Thread
threads = [None] * 10
results = [None] * 10
for i in range(len(threads)):
threads[i] = Thread(target=foo, args=('world!', results, i))
threads[i].start()
for i in range(len(threads)):
threads[i].join()
print(" ".join(results))
このコードでは、各スレッドがresults
リストの専用スロットに"foo"
を格納します。スレッドが終了した後、results
リストには各スレッドの戻り値が格納されます。
異なるスレッドでの入力と出力の同時実行
Pythonでは、異なるスレッドで同時に入力と出力を行うことが可能です。以下にその例を示します。
import threading
import time
def run_thread():
while True:
print('thread running')
time.sleep(2)
global stop_threads
if stop_threads:
break
stop_threads = False
t1 = threading.Thread(target=run_thread)
t1.start()
time.sleep(0.5)
q = ''
while q != 'q':
q = input()
stop_threads = True
t1.join()
print('finish')
このコードでは、run_thread
関数が別のスレッドで実行され、ユーザーが'q'
を入力するまで'thread running'
を出力し続けます。同時に、メインスレッドではユーザーからの入力を待ち続けます。
以上がPythonのスレッディングを使用した入出力の基本的な方法です。これらのテクニックを使用することで、Pythonプログラムの並行処理を効果的に行うことができます。