回答編集履歴

3

なぜ、Jupyter Notebook では非同期処理の挙動が違うのかという点に触れていなかったため再度追記

2022/12/25 12:05

投稿

Demerara
Demerara

スコア397

test CHANGED
@@ -40,3 +40,9 @@
40
40
 
41
41
  できれば、一度英語で公式ドキュメントを読むことをおすすめします。
42
42
  [asyncio — Asynchronous I/O — Python 3.11.1 documentation](https://docs.python.org/ja/3/library/asyncio.html)
43
+
44
+ 更に追記:
45
+ Jupyter Notebook もとい、IPython における非同期処理の詳細(なぜ、イベントループが使えないのか、なぜ直接 `await` しなければならないのか等)
46
+ [Asynchronous in REPL: Autoawait](https://ipython.readthedocs.io/en/stable/interactive/autoawait.html)
47
+
48
+ ちなみに、質問者さんのコードは Jupyter Notebook を使わず、普通の `.py` ファイルで実行すれば問題なく動くと思います。参照している記事の通り勉強したいのであれば、Jupyter Notebook は使わないほうがいいかと思います。

2

公式ドキュメントのリンク先が間違っていたので修正

2022/12/25 11:40

投稿

Demerara
Demerara

スコア397

test CHANGED
@@ -38,5 +38,5 @@
38
38
  自分の中では、以下の記事がわかりやすかった気がしますので一応リンクを置いておきます。ただし、記事の内容を保証するものではないです。
39
39
  [pythonのasyncioを非同期処理知識0から勉強してみた](https://qiita.com/haryuu/items/b948c2953d4c4493ba7a)
40
40
 
41
- できれば、英語で公式ドキュメントを読むことをおすすめします。
41
+ できれば、一度英語で公式ドキュメントを読むことをおすすめします。
42
- [Runners — Python 3.11.0b5 ドキュメント](https://docs.python.org/ja/3/library/asyncio-runner.html)
42
+ [asyncio — Asynchronous I/O — Python 3.11.1 documentation](https://docs.python.org/ja/3/library/asyncio.html)

1

説明が不足している気がしたので補足内容を追記

2022/12/25 11:35

投稿

Demerara
Demerara

スコア397

test CHANGED
@@ -20,4 +20,23 @@
20
20
  await main()
21
21
  ```
22
22
 
23
+ 追記:
24
+ 参照されている記事は、少々古いかもしれません。
23
25
 
26
+ 以下、[公式ドキュメント](https://docs.python.org/ja/3/library/asyncio-eventloop.html)より抜粋:
27
+ > イベントループは全ての asyncio アプリケーションの中核をなす存在です。イベントループは非同期タスクやコールバックを実行し、ネットワーク I/O を処理し、サブプロセスを実行します。
28
+
29
+ > アプリケーション開発者は通常 asyncio.run() のような高水準の ayncio 関数だけを利用し、ループオブジェクトを参照したり、ループオブジェクトのメソッドを呼び出したりすることはほとんどありません。この節は、イベントループの振る舞いに対して細かい調整が必要な、低水準のコード、ライブラリ、フレームワークの開発者向けです。
30
+
31
+ とある通り、Python 初心者が学ぶ類のものではありません。
32
+
33
+ 加えて、`get_event_loop` は、Python 3.10 で非推奨。3.12 ではエラーを返すようになるそうです。
34
+ <https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.get_event_loop>
35
+ > Deprecated since version 3.10: Deprecation warning is emitted if there is no current event loop. In Python 3.12 it will be an error.
36
+
37
+ ということで、参照されている記事は非同期処理入門としては適さないかもしれません。少し探してみましたが、日本語で適切に書かれている非同期処理入門記事はなかなか見当たりません。
38
+ 自分の中では、以下の記事がわかりやすかった気がしますので一応リンクを置いておきます。ただし、記事の内容を保証するものではないです。
39
+ [pythonのasyncioを非同期処理知識0から勉強してみた](https://qiita.com/haryuu/items/b948c2953d4c4493ba7a)
40
+
41
+ できれば、英語で公式ドキュメントを読むことをおすすめします。
42
+ [Runners — Python 3.11.0b5 ドキュメント](https://docs.python.org/ja/3/library/asyncio-runner.html)