回答編集履歴
3
コードの余分な部位を削除
answer
CHANGED
@@ -67,12 +67,6 @@
|
|
67
67
|
thread.join()
|
68
68
|
|
69
69
|
|
70
|
-
def main2():
|
71
|
-
loop = asyncio.get_event_loop()
|
72
|
-
# loop.run_until_complete(main())
|
73
|
-
asyncio.run(main(), debug=True)
|
74
|
-
|
75
|
-
|
76
70
|
if __name__ == '__main__':
|
77
71
|
main1()
|
78
72
|
```
|
2
誤記
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
適切な回答かどうか自信がない(asyncioの仕様経験が乏しい)のですが、自分は次のように考えました。
|
2
2
|
|
3
3
|
- Tkinterはメインスレッドで動かす。
|
4
|
-
run_in_executorを使ってしまうとメインスレッド以外でTkinterが実行されることになるためか、ご質問にあるとおりうまくいかないようです。メインスレッド以外でTkinterのイベントループが動くものかどうかよく調べてはいないですが・・・。よってTkinterに関する処理をasyncioのタスクとして動かすのはあきらめざるを得ないように思います。async関数の中でTkinterを呼び出しても動くことは動くでしょうが、そこで非同期I/O処理は全て止まってしまうため並行し
|
4
|
+
run_in_executorを使ってしまうとメインスレッド以外でTkinterが実行されることになるためか、ご質問にあるとおりうまくいかないようです。メインスレッド以外でTkinterのイベントループが動くものかどうかよく調べてはいないですが・・・。よってTkinterに関する処理をasyncioのタスクとして動かすのはあきらめざるを得ないように思います。async関数の中でTkinterを呼び出しても動くことは動くでしょうが、そこで非同期I/O処理は全て止まってしまうため並行して動かしたいならasyncioを動かすスレッドとは別のスレッドで(asyncioの枠組みとは別の世界で)動かす必要があるように思います。
|
5
5
|
|
6
6
|
- 非同期I/Oはメインスレッド以外でも動くのでこちらをサブスレッドで動かすようにする。
|
7
7
|
|
1
訂正
answer
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
|
1
|
+
適切な回答かどうか自信がない(asyncioの仕様経験が乏しい)のですが、自分は次のように考えました。
|
2
2
|
|
3
|
-
自分はまず次のように考えました。
|
4
|
-
|
5
3
|
- Tkinterはメインスレッドで動かす。
|
6
4
|
run_in_executorを使ってしまうとメインスレッド以外でTkinterが実行されることになるためか、ご質問にあるとおりうまくいかないようです。メインスレッド以外でTkinterのイベントループが動くものかどうかよく調べてはいないですが・・・。よってTkinterに関する処理をasyncioのタスクとして動かすのはあきらめざるを得ないように思います。async関数の中でTkinterを呼び出しても動くことは動くでしょうが、そこで非同期I/O処理は全て止まってしまうため並行した動かしたいならasyncioを動かすスレッドとは別のスレッドで動かす必要があるように思います。
|
7
5
|
|
@@ -11,7 +9,7 @@
|
|
11
9
|
mainにてタスクの実行を(awaitなどで)待ってないので、コルーチンは生成されるものの、その実行が先に進まないままmainが終わってしまいます。
|
12
10
|
|
13
11
|
- Tkinterの処理をasyncio側で待つ
|
14
|
-
asyncio.Futureを作り、メインスレッド側でそのFutureにset_resultで結果を設定してやるとasyncio処理側でそのFutureを待つことで同期および結果が利用できると考えました。他にもっとよい(自然)な方法があるかも知れません
|
12
|
+
asyncio.Futureを作り、メインスレッド側でそのFutureにset_resultで結果を設定してやるとasyncio処理側でそのFutureを待つことで同期および結果が利用できると考えました。他にもっとよい(自然)な方法があるかも知れません・・・
|
15
13
|
|
16
14
|
main.py
|
17
15
|
```python
|