回答編集履歴

6

説明の曖昧な点を補足

2020/05/12 06:09

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -120,7 +120,7 @@
120
120
 
121
121
 
122
122
 
123
- - async は、awaitを用いる関数 の定義で使います。この関数を呼び出すと「コルーチン」を返します。
123
+ - async は、awaitを用いる関数 の定義で使います。async付きで定義された関数を呼び出すと「コルーチン」を返します。
124
124
 
125
125
 
126
126
 

5

関数名間違えのコード修正。再帰呼び出しになっていた

2020/05/12 06:09

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -296,7 +296,7 @@
296
296
 
297
297
  if callback:
298
298
 
299
- self.add_event_detect(callback)
299
+ self.add_event_callback(callback)
300
300
 
301
301
  # ここは実際にも、add_event_detectを呼び出す事で、新スレッドが立ち上がります。
302
302
 

4

apigpio について補足

2020/05/12 02:47

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -96,6 +96,20 @@
96
96
 
97
97
 
98
98
 
99
+ 全体像はこのような感じになります(概要のみ)
100
+
101
+ - apigpio GPIOを扱う非同期IO
102
+
103
+ - discord を扱う非同期IO (client.runの代わりにclient.startを利用)
104
+
105
+ - NOTE: 非同期同士の連携には asyncio.Queue が使えます。
106
+
107
+ - asyncio.gatherで2つの非同期処理をまとめる (後述のコードを参考にして下さい)
108
+
109
+ - asyncio.runで開始
110
+
111
+
112
+
99
113
  ----
100
114
 
101
115
  ## async/await について

3

後からサイト上で編集した部分、client.start の引数でエラーになっていたのを修正。

2020/05/12 02:25

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -314,7 +314,7 @@
314
314
 
315
315
 
316
316
 
317
- async def start(self):
317
+ async def start(self, *args):
318
318
 
319
319
  # 非同期で動作。
320
320
 

2

コード微修正

2020/05/12 02:14

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -438,7 +438,7 @@
438
438
 
439
439
  await asyncio.sleep(1)
440
440
 
441
- print("DISC recv from discord <<<", msg)
441
+ print("recv from discord <<<", msg)
442
442
 
443
443
 
444
444
 

1

discord の BOT token について追記

2020/05/12 02:08

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -478,7 +478,11 @@
478
478
 
479
479
  # 非同期処理: ディスコードclient と、キューの読み出しの開始
480
480
 
481
+
482
+
483
+ BOT_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
484
+
481
- await asyncio.gather(client.start(), listen_queue_loop())
485
+ await asyncio.gather(client.start(BOT_TOKEN), listen_queue_loop())
482
486
 
483
487
 
484
488