ThreadPoolExecutorでメインスレッドと並行処理したい
Q&A
Closed
Tkinterで、APIの戻り待ちをしつつ画面にシークバー的なものを表示しようとしています。
画面更新はメインスレッドで行う必要があるようなので↓のように書けばメインスレッドと並行して処理が行えると思ったのですが、
実際は heavy_task() → (stats_finish()) → update_stats() と順番に処理されています。
明示的にメインスレッドを待たなくする方法、もしくは別スレッドでTkinterの画面を更新する方法、もしくはそもそももっとスマートに実装する方法等はあるでしょうか…?
# 処理中…をぐるぐる回す
def update_stats(root):
while fin:
stats['text'] = status_icons[count]
root.update()
time.sleep(1)
count = count+1
if count > 3:count = 0
with ThreadPoolExecutor(max_workers=2, thread_name_prefix="thread") as executor:
future = executor.submit(heavy_task)
# 処理が終わったらupdate_statsにお知らせする用
future.add_done_callback(stats_finish)
update_stats(root) # これがheavy_taskと平行してほしい
result = future.result() # ここで待ち合わせしてほしい
0