回答編集履歴
3
誤字修正
answer
CHANGED
@@ -8,8 +8,8 @@
|
|
8
8
|
- 非同期 I/O (asyncio)
|
9
9
|
|
10
10
|
**GUI のイベントループ内で実行する場合**は、 read(in_waiting) でも、
|
11
|
-
|
11
|
+
blocking mode である以上、GUIが止まる可能性が残っているので、
|
12
|
-
timeout, write_timeoutを設定し、non-blocking mode
|
12
|
+
timeout, write_timeoutを設定し、non-blocking mode にする必要があります。
|
13
13
|
稀なケースですが、read(),write()が完了しない**障害時にGUI全体がフリーズしてしまいます**
|
14
14
|
|
15
15
|
----
|
2
ドキュメントのサンプルコードのリンクを追加
answer
CHANGED
@@ -18,6 +18,10 @@
|
|
18
18
|
pySerial であれば、行バッファリングならLineReader クラスで、
|
19
19
|
改行コード受信時にメソッド呼び出しできます。(受信待機にはスレッドを利用)
|
20
20
|
|
21
|
+
- [serial.threaded.LineReader example](https://pythonhosted.org/pyserial/pyserial_api.html#module-serial.threaded)
|
22
|
+
改行コードを受信すると、それ迄の入力を引数にして handle_line() が呼び出される。
|
23
|
+
|
24
|
+
----
|
21
25
|
asyncio を使う場合、非同期シリアル通信のライブラリは複数あるようですが、
|
22
26
|
行単位の読み出し処理には asyncio.StreamReader を併用すると、
|
23
27
|
`line = await stream.readline()` みたいなコードで、
|
1
語句の修正
answer
CHANGED
@@ -25,5 +25,5 @@
|
|
25
25
|
|
26
26
|
但し、GUIプログラムの場合は、
|
27
27
|
非同期 I/O のイベントループもGUIのイベントループと一緒に動かさないといけないので、
|
28
|
-
結局はスレッドを導入することになります。
|
28
|
+
結局は別スレッドを導入することになります。
|
29
|
-
(スレッド
|
29
|
+
(同一スレッド内でも可能ですが、tkinter + asyncio の事例が少ない為)
|