回答編集履歴
3
コードの余分な部位を削除
test
CHANGED
@@ -136,18 +136,6 @@
|
|
136
136
|
|
137
137
|
|
138
138
|
|
139
|
-
def main2():
|
140
|
-
|
141
|
-
loop = asyncio.get_event_loop()
|
142
|
-
|
143
|
-
# loop.run_until_complete(main())
|
144
|
-
|
145
|
-
asyncio.run(main(), debug=True)
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
139
|
if __name__ == '__main__':
|
152
140
|
|
153
141
|
main1()
|
2
誤記
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
- Tkinterはメインスレッドで動かす。
|
6
6
|
|
7
|
-
run_in_executorを使ってしまうとメインスレッド以外でTkinterが実行されることになるためか、ご質問にあるとおりうまくいかないようです。メインスレッド以外でTkinterのイベントループが動くものかどうかよく調べてはいないですが・・・。よってTkinterに関する処理をasyncioのタスクとして動かすのはあきらめざるを得ないように思います。async関数の中でTkinterを呼び出しても動くことは動くでしょうが、そこで非同期I/O処理は全て止まってしまうため並行し
|
7
|
+
run_in_executorを使ってしまうとメインスレッド以外でTkinterが実行されることになるためか、ご質問にあるとおりうまくいかないようです。メインスレッド以外でTkinterのイベントループが動くものかどうかよく調べてはいないですが・・・。よってTkinterに関する処理をasyncioのタスクとして動かすのはあきらめざるを得ないように思います。async関数の中でTkinterを呼び出しても動くことは動くでしょうが、そこで非同期I/O処理は全て止まってしまうため並行して動かしたいならasyncioを動かすスレッドとは別のスレッドで(asyncioの枠組みとは別の世界で)動かす必要があるように思います。
|
8
8
|
|
9
9
|
|
10
10
|
|
1
訂正
test
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
完全な解決になってないですが・・・
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
自分は
|
1
|
+
適切な回答かどうか自信がない(asyncioの仕様経験が乏しい)のですが、自分は次のように考えました。
|
6
2
|
|
7
3
|
|
8
4
|
|
@@ -24,7 +20,7 @@
|
|
24
20
|
|
25
21
|
- Tkinterの処理をasyncio側で待つ
|
26
22
|
|
27
|
-
asyncio.Futureを作り、メインスレッド側でそのFutureにset_resultで結果を設定してやるとasyncio処理側でそのFutureを待つことで同期および結果が利用できると考えました。他にもっとよい(自然)な方法があるかも知れません
|
23
|
+
asyncio.Futureを作り、メインスレッド側でそのFutureにset_resultで結果を設定してやるとasyncio処理側でそのFutureを待つことで同期および結果が利用できると考えました。他にもっとよい(自然)な方法があるかも知れません・・・
|
28
24
|
|
29
25
|
|
30
26
|
|