teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

デモコードの解説を追記

2021/07/19 06:18

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -18,6 +18,20 @@
18
18
 
19
19
 
20
20
  参考: [公式のデモコード](https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Multithreaded_Long_Tasks.py)
21
- - Thread を使い、時間のかかる処理は別スレッドで行う。
21
+ - (Do Long Task ボタンを押した時) Thread を使い、時間のかかる処理は別スレッドで行う。
22
+  long_operation_thread 関数を別スレッドで実行。
23
+ - 別スレッド内では時間のかかる処理、待機処理を行っても、
24
+  GUIのイベントループを阻害しないため、問題有りません。
22
25
  - 別スレッドでGUIを直接変更はスレッドセーフな操作ではないので、
23
-  GUIへの反映はイベントループ側で行う。→ write_event_value で独自のイベントを通知。
26
+  GUIへの反映はイベントループ側で行う。→ write_event_value で独自のイベントを通知。
27
+
28
+ 質問のケースに適応すると、
29
+ 1) tweepy での処理を別スレッドで行う。
30
+ (long_operation_thread関数に当たる部分、関数名は何でも良い)
31
+
32
+ 2) tweepy での検索結果は、別スレッド側で直接 Multiline へは反映させない。
33
+ (マルチスレッドで安全な操作ではない為、稀に問題がおきる可能性がある。)
34
+ write_event_value を使い、イベントとしてメインスレッドのイベントループに送ります、
35
+
36
+ 3) 別スレッドから write_event_value で送られたイベントを受けて、
37
+ メッセージを Multiline へ反映させる。