前提・実現したいこと
Python3でThreadPoolExecutorを使用してスレッドを実行しようと、
下記の様なソースコードを試しました。
実現したいことは関数「create_tran(tg_list)」で出力で引数のリストの文字列を順に出力するスレッドを作成し、ThreadPoolExecutorに読み込ませて平行にメッセージを出力したいです。
(例:出力したいメッセージ)
下記のソースコードを実行したところ、リストの最終文字(ccccc)が出力されるスレッドが三回実行されてしまいます。
(例:下記のソースコードを実行した場合の出力)
ジェネレータ理解不足で申し訳ないのですが、原因とジェネレータでスレッドを作成する時の注意点などありましたらアドバイス頂きたいと考えています。
出力したい出力
aaaaa bbbbb ccccc
下記のソースコードを実行した場合の出力
ccccc ccccc ccccc
該当のソースコード
Python
1import time 2import concurrent.futures 3 4 5def create_tran(tg_list): 6 for tg_name in tg_list: 7 def _tran(): 8 time.sleep(3) 9 print(tg_name) 10 yield _tran 11 12 13def main(): 14 tg_list = ['aaaaa', 'bbbbb', 'ccccc'] 15 tran_list = create_tran(tg_list) 16 executor = concurrent.futures.ThreadPoolExecutor(max_workers=3) 17 for tran in tran_list: 18 executor.submit(tran) 19 20 21if __name__ == "__main__": 22 main() 23
試したこと
time.sleep(3)を削除しましたら、目的の出力が行われましたが関数「_tran()」内に重い処理を記載しましたらやはり同一の現象がおこりました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/08 09:54