Upgrade to Pro — share decks privately, control downloads, hide ads and more …

こわくないasyncio基礎と非同期IO - 動くコードを添えて

jrfk
August 19, 2022

こわくないasyncio基礎と非同期IO - 動くコードを添えて

Pythonで非同期IOを利用する上での asyncio 基礎です。
コードはこちら https://github.com/jrfk/talk/tree/main/stpy

jrfk

August 19, 2022
Tweet

More Decks by jrfk

Other Decks in Programming

Transcript

  1. こわくないasyncio基礎と⾮同期IO Junya Fukuda ΈΜͳͷPythonษڧձ #84 動くコードを添えて

  2. •෱ా ൏໵ʢJunya Fukudaʣʢ@JunyaFffʣ •גࣜձࣾ೔ຊγεςϜٕݚʢJSLʣॴଐ ௕໺ݝͷձࣾ •WebΤϯδχΞ •GEEKLAB.NAGANO - ίϛϡχςΟεϖʔεӡӦ •ʢ͓͠͝ͱͰʣόϦϡʔϒοΫε

    •ຊ޷͖ʹѪ͞ΕΔαʔϏεΛ໨ࢦͯ͠ʢݹຊങऔɾൢചʣ ΪʔΫϥϘ௕໺ಡॻձ •GEEKLAB.NAGANO - ίϛϡχςΟεϖʔεӡӦ
  3. Python実践 •2022೥1݄ൃച ٕज़ධ࿦ࣾ •Python 3 ΤϯδχΞೝఆ࣮ફࢼݧ ओڭࡐ •2࡭໨ʹ͓͢͢Ίʂࣙॻతʹ࢖͍ͬͯ͋͛ͯͩ͘͞ʂ • ҎԼͷষΛ୲౰͍ͯ͠·͢

    • Chapter2 ίʔσΟϯάن໿ • Chapter5 ܕώϯτ • Chapter19 ฒߦॲཧɼฒྻॲཧ
  4. Python実践 •2022೥1݄ൃച •Python 3 ΤϯδχΞೝఆ࣮ફࢼݧ ओڭࡐ •2࡭໨ʹ͓͢͢Ίʂࣙॻతʹ࢖͍ͬͯ͋͛ͯͩ͘͞ʂ • ҎԼͷষΛ୲౰͍ͯ͠·͢ •

    Chapter2 ίʔσΟϯάن໿ • Chapter5 ܕώϯτ • Chapter19 ฒߦॲཧɼฒྻॲཧ ຊ೔ϓϨθϯτ΋͋Γ·͢ʂʂʂ
  5. Python Monthly Topics Web連載 •ٕज़ධ࿦ࣾ - gihyo.jp •ஶऀͷ༗ࢤͰ •ຖ݄Pythonʹؔ͢ΔτϐοΫΛ࿈ࡌ

  6. みなさんPythonで Webやっていますか?✋

  7. JetBrains 2021年の調査 https://www.jetbrains.com/ja-jp/lp/devecosystem-2021/python/

  8. JetBrains 2021年の調査 https://www.jetbrains.com/ja-jp/lp/devecosystem-2021/python/

  9. JetBrains 2021年の調査 https://www.jetbrains.com/ja-jp/lp/devecosystem-2021/python/ ิ଍ɿ2020೥ͷ݁Ռ FastAPI͸ͳ͔ͬͨ

  10. JetBrains 2021年の調査 https://www.jetbrains.com/ja-jp/lp/devecosystem-2021/python/

  11. Pythonで⾮同期IOと いえば?

  12. asyncio

  13. すべてはasync/awaitから始まった

  14. > IUUQT fl PSJNPOEEFWCMPHBSUJDMFTJOUSPEVDUJPOUPBTHJBTZODQZUIPOXFC すべてはasync/awaitから始まった

  15. asyncioはこわくない

  16. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ asyncioはこわくない

  17. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない

  18. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない
  19. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない •ฒߦॲཧͷ ίʔυΛॻͨ͘ΊͷϥΠϒϥϦ
  20. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない •ฒߦॲཧͷ ίʔυΛॻͨ͘ΊͷϥΠϒϥϦ •γϯάϧεϨουͰΠϕϯτϧʔϓͰඇಉظ IO
  21. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない •ฒߦॲཧͷ ίʔυΛॻͨ͘ΊͷϥΠϒϥϦ •γϯάϧεϨουͰΠϕϯτϧʔϓͰඇಉظ IO •RFCͰඪ४Խ͞ΕͨWebن֨ QUIC ͷॳظͷϦϑΝϨϯεత࣮૷ aioquic
  22. asyncio めっちゃこわい

  23. •͜Θ͔ͬͨ asyncio めっちゃこわい

  24. •͜Θ͔ͬͨ •Using Asyncio in Python - ΦϥΠϦʔ ʢ🐸ຊʣ asyncio めっちゃこわい

    •2ͭͷग़ձ͍ https://www.oreilly.com/library/view/using-asyncio-in/9781492075325/
  25. •͜Θ͔ͬͨ •ίϧʔνϯ͸ා͘ͳ͍ - Minimum Viable Programmer ʢϒϩάʣ •Using Asyncio in

    Python - ΦϥΠϦʔ ʢ🐸ຊʣ asyncio めっちゃこわい •2ͭͷग़ձ͍
  26. •͜Θ͔ͬͨ •ίϧʔνϯ͸ා͘ͳ͍ - Minimum Viable Programmer ʢϒϩάʣ •Using Asyncio in

    Python - ΦϥΠϦʔ ʢ🐸ຊʣ asyncio めっちゃこわい •2ͭͷग़ձ͍ •τʔΫ3 ʰFastAPIͬͯԿऀͩΖ͏ʁʱ - ಃࢁ ྮ ͞Μ
  27. None
  28. •asyncio͜Θ͍ͳ͋…

  29. •asyncio͜Θ͍ͳ͋… •asyncio ͪΐͬͱා͘ͳ͘ͳ͔ͬͨ΋ 👋

  30. •asyncio͜Θ͍ͳ͋… •asyncio ͪΐͬͱා͘ͳ͘ͳ͔ͬͨ΋ 👋 •τʔΫ̎ Django /τʔΫ̏FastAPI ϫΫϫΫʂ

  31. •asyncio͜Θ͍ͳ͋… •asyncio ͪΐͬͱා͘ͳ͘ͳ͔ͬͨ΋ 👋 •τʔΫ̎ Django /τʔΫ̏FastAPI ϫΫϫΫʂ

  32. 本⽇のおしながき(話すこと) •PythonͰඇಉظIOΛར༻͢Δ্Ͱͷ asyncio جૅ

  33. 本⽇のおしながき(話すこと) •࣮ࡍʹಈ͘ίʔυΛݟͳ͕Βʂʢ؆୯ͳϥΠϒίʔσΟϯά͠·͢ʣ •PythonͰඇಉظIOΛར༻͢Δ্Ͱͷ asyncio جૅ

  34. 本⽇のおしながき(話すこと) •࣮ࡍʹಈ͘ίʔυΛݟͳ͕Βʂʢ؆୯ͳϥΠϒίʔσΟϯά͠·͢ʣ •PythonͰඇಉظIOΛར༻͢Δ্Ͱͷ asyncio جૅ •GitHubʹίʔυ΋͋Γ·͢ʂ

  35. 本⽇のおしながき(話すこと) •࣮ࡍʹಈ͘ίʔυΛݟͳ͕Βʂʢ؆୯ͳϥΠϒίʔσΟϯά͠·͢ʣ •PythonͰඇಉظIOΛར༻͢Δ্Ͱͷ asyncio جૅ •GitHubʹίʔυ΋͋Γ·͢ʂ •Έͳ͞Μ΋ͥͻ͓खݩͰಈ͔͠ͳ͕Βʂ •https://github.com/jrfk/talk/tree/main/stpy

  36. •asyncio ͸௒ڊେ 対象はアプリーケーション開発者向けのasyncio

  37. •asyncio ͸௒ڊେ •ެࣜυΩϡϝϯτ΋ߴϨϕϧ APIͱ௿ϨϕϧAPIʹ෼͔ΕͯΔ 対象はアプリーケーション開発者向けのasyncio

  38. •asyncio ͸௒ڊେ •Θͨͨͪ͠͸ΞϓϦέʔγϣϯ։ൃऀ •ެࣜυΩϡϝϯτ΋ߴϨϕϧ APIͱ௿ϨϕϧAPIʹ෼͔ΕͯΔ 対象はアプリーケーション開発者向けのasyncio

  39. •asyncio ͸௒ڊେ •ϑϨʔϜϫʔΫ΍ϥΠϒϥϦ։ൃऀ޲͚ͷػೳ͸ͪΐͬͱ͓͍͓͖ͯ·͠ΐ͏ •Θͨͨͪ͠͸ΞϓϦέʔγϣϯ։ൃऀ •ެࣜυΩϡϝϯτ΋ߴϨϕϧ APIͱ௿ϨϕϧAPIʹ෼͔ΕͯΔ 対象はアプリーケーション開発者向けのasyncio

  40. •asyncio ͸௒ڊେ •ϑϨʔϜϫʔΫ΍ϥΠϒϥϦ։ൃऀ޲͚ͷػೳ͸ͪΐͬͱ͓͍͓͖ͯ·͠ΐ͏ •Θͨͨͪ͠͸ΞϓϦέʔγϣϯ։ൃऀ •ެࣜυΩϡϝϯτ΋ߴϨϕϧ APIͱ௿ϨϕϧAPIʹ෼͔ΕͯΔ 対象はアプリーケーション開発者向けのasyncio •ΞϓϦέʔγϣϯ։ൃऀ޲͚Λର৅ʹͨ͠asyncio

  41. •asyncio ͸௒ڊେ •ϑϨʔϜϫʔΫ΍ϥΠϒϥϦ։ൃऀ޲͚ͷػೳ͸ͪΐͬͱ͓͍͓͖ͯ·͠ΐ͏ •Θͨͨͪ͠͸ΞϓϦέʔγϣϯ։ൃऀ •ެࣜυΩϡϝϯτ΋ߴϨϕϧ APIͱ௿ϨϕϧAPIʹ෼͔ΕͯΔ •ΞϓϦέʔγϣϯ։ൃऀ޲͚Λର৅ʹͨ͠asyncio •લఏ஌ࣝͱͯ͠ݴ༿ͷઆ໌ͱɺasyncioͰΘͨͨͪ͠ʹͱͬͯඞཁͳ͜ͱ 対象はアプリーケーション開発者向けのasyncio

  42. •asyncio ͸௒ڊେ •ϑϨʔϜϫʔΫ΍ϥΠϒϥϦ։ൃऀ޲͚ͷػೳ͸ͪΐͬͱ͓͍͓͖ͯ·͠ΐ͏ •Θͨͨͪ͠͸ΞϓϦέʔγϣϯ։ൃऀ •ެࣜυΩϡϝϯτ΋ߴϨϕϧ APIͱ௿ϨϕϧAPIʹ෼͔ΕͯΔ •ΞϓϦέʔγϣϯ։ൃऀ޲͚Λର৅ʹͨ͠asyncio •લఏ஌ࣝͱͯ͠ݴ༿ͷઆ໌ͱɺasyncioͰΘͨͨͪ͠ʹͱͬͯඞཁͳ͜ͱ 対象はアプリーケーション開発者向けのasyncio

  43. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない こわい •ฒߦॲཧͷ ίʔυΛॻͨ͘ΊͷϥΠϒϥϦ •γϯάϧεϨουͰΠϕϯτϧʔϓͰඇಉظ IO •RFCͰඪ४Խ͞ΕͨWebن֨ QUIC ͷϦϑΝϨϯεత࣮૷ aioquic
  44. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない こわい •ฒߦॲཧͷ ίʔυΛॻͨ͘ΊͷϥΠϒϥϦ •γϯάϧεϨουͰΠϕϯτϧʔϓͰඇಉظ IO •RFCͰඪ४Խ͞ΕͨWebن֨ QUIC ͷϦϑΝϨϯεత࣮૷ aioquic
  45. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない こわい •ฒߦॲཧͷ ίʔυΛॻͨ͘ΊͷϥΠϒϥϦ •γϯάϧεϨουͰΠϕϯτϧʔϓͰඇಉظ IO •ઌ೔RFCͰඪ४Խ͞ΕͨWebن֨ QUIC ͷϦϑΝϨϯεత࣮૷ aioquic
  46. ⾔葉を完全に理解する

  47. IUUQTEPDTQZUIPOPSHKBMJCSBSZBTZODJPIUNM

  48. 前提知識 並⾏処理

  49. 前提知識 並⾏処理 並列処理

  50. 前提知識 並⾏処理 並列処理 逐次処理

  51. 前提知識 並⾏処理 並列処理 逐次処理 タスクの処理

  52. 前提知識 並⾏処理 concurrent processing

  53. 前提知識 並⾏処理 concurrent processing 複数の処理を同時に実⾏するという意味

  54. 前提知識 並⾏処理 concurrent processing 複数の処理を同時に実⾏するという意味 イメージ重視

  55. 前提知識 並⾏処理 ฒߦॲཧͱͦͷ۩ମతͳॲཧํࣜͷͭͰ͋Δฒྻॲཧ͸ɺ ιϑτ΢ΣΞ޻ֶͷ෼໺ʹ͓͍ͯ΋ͬͱ΋෯޿͍τϐοΫͷͭͰ͢ɻ ਺े࡭ͷຊΛ΋ͬͯͯ͠΋ɺฒߦॲཧʹ͓͍ͯॏཁͳϙΠϯτ΍ ฒߦॲཧϞσϧʹؔͯ͠े෼ͳٞ࿦͸Ͱ͖ͳ͍Ͱ͠ΐ͏ɻ https://www.kadokawa.co.jp/product/302105001236/ ΤΩεύʔτ1ZUIPOϓϩάϥϛϯάվగ൛ ൃച

  56. 前提知識 並⾏処理 https://www.oreilly.co.jp/books/9784873119595/ 並⾏コンピューティング技法 ――実践マルチコア/マルチスレッドプログラミング 並⾏プログラミング⼊⾨ ――Rust、C、アセンブリによる実装からのアプローチ https://www.oreilly.co.jp/books/9784873114354/

  57. イメージ重視

  58. 並⾏処理 並列処理 逐次処理

  59. 並⾏処理 並列処理 逐次処理

  60. 並⾏処理 並列処理 逐次処理

  61. 並⾏処理 並列処理 通常の関数を呼び出していく処理 逐次処理

  62. 並⾏処理 並列処理 通常の関数を呼び出していく処理 multiprocessingモジュール 逐次処理

  63. 並⾏処理 並列処理 通常の関数を呼び出していく処理 multiprocessingモジュール threadingモジュール asyncioモジュール 逐次処理

  64. ちょっとわかりにくいので レストラン🍽に例えます

  65. レストラン

  66. レストラン どんなタスクが あるでしょうか

  67. 注⽂をとる

  68. 料理を作る 注⽂をとる

  69. 料理を作る 注⽂をとる 料理を運ぶ

  70. 逐次処理

  71. 注⽂を取る - 料理を作る - 料理を運ぶ 逐次処理

  72. 注⽂を取る - 料理を作る - 料理を運ぶ 完了してから次のタスク 逐次処理

  73. 並列処理

  74. 並列処理 注⽂を取る 料理を作る 料理を運ぶ

  75. 並列処理 注⽂を取る 料理を作る 料理を運ぶ 複数のタスクを同時に着⼿する

  76. 並⾏処理

  77. 並⾏処理 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る -

    料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ
  78. 並⾏処理 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る -

    料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ
  79. 並⾏処理 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る -

    料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ asyncio シングルスレッド
  80. 並⾏処理 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る -

    料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ asyncio シングルスレッド = ワンオペ
  81. 並⾏処理 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る -

    料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ asyncio シングルスレッド = ワンオペ 同じ⼈
  82. 並⾏処理 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る -

    料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ asyncio シングルスレッド = ワンオペ どのタイミングでタスクの切り替えをするのでしょうか 🤔
  83. asyncio シングルスレッド = ワンオペ どのタイミングでタスクの切り替えをするのでしょうか 🤔 あなた

  84. asyncio シングルスレッド = ワンオペ どのタイミングでタスクの切り替えをするのでしょうか 🤔 あなた お客様

  85. asyncio シングルスレッド = ワンオペ どのタイミングでタスクの切り替えをするのでしょうか 🤔 あなた お客様 ←注⽂

  86. asyncio シングルスレッド = ワンオペ どのタイミングでタスクの切り替えをするのでしょうか 🤔 あなた 考え中のお客様 ←注⽂待ち

  87. asyncio シングルスレッド = ワンオペ どのタイミングでタスクの切り替えをするのでしょうか 🤔 あなた 考え中のお客様 ←注⽂待ち あなたから⾒て、

    外部のお客様、から 注⽂という ⼊⼒を待つ状態
  88. asyncio どのタイミングでタスクの切り替えをするのでしょうか 🤔 あなた 考え中のお客様 ←注⽂待ち あなたから⾒て、 外部のお客様、から 注⽂という ⼊⼒を待つ状態

  89. a どのタイミングでタスクの切り替えをするのでしょうか 🤔 あなた 考え中のお客様 ←注⽂待ち あなたから⾒て、 外部のお客様、から 注⽂という ⼊⼒を待つ状態

    ⾮同期IO syncio
  90. a sync io

  91. a sync io ⼊⼒

  92. a sync io 同期 ⼊⼒

  93. a sync io しない 同期 ⼊⼒

  94. asyncio ⾮同期IO

  95. asyncio ⾮同期IO

  96. asyncio ⾮同期IO プログラムでいう外部の⼊⼒

  97. asyncio ⾮同期IO プログラムでいう外部の⼊⼒ “ネットワークやデータベースへの⼊出⼒”

  98. asyncio ⾮同期IO プログラムでいう外部の⼊⼒ “ネットワークやデータベースへの⼊出⼒” I/Oバウンドな処理

  99. asyncio ⾮同期IO プログラムでいう外部の⼊⼒ “ネットワークやデータベースへの⼊出⼒” I/Oバウンドな処理 asyncioの得意なこと

  100. •Python 3.4 Ͱ ௥Ճ͞Εͨඪ४ϥΠϒϥϦ •Python 3.6 Ͱ ඇಉظδΣωϨʔλʔ / ඇಉظ಺แදه

    •Python 3.5 Ͱ async/await ߏจ asyncioはこわくない こわい •ฒߦॲཧͷ ίʔυΛॻͨ͘ΊͷϥΠϒϥϦ •γϯάϧεϨουͰΠϕϯτϧʔϓͰඇಉظ IO •ઌ೔RFCͰඪ४Խ͞ΕͨWebن֨ QUIC ͷϦϑΝϨϯεత࣮૷ aioquic γϯάϧεϨου ฒߦॲཧ ඇಉظ IO
  101. ฒߦॲཧ asyncioの周辺はちょっとこわくない γϯάϧεϨου ඇಉظ IO

  102. ฒߦॲཧ asyncioの周辺はちょっとこわくない γϯάϧεϨου ඇಉظ IO

  103. ฒߦॲཧ asyncioの周辺はちょっとこわくない γϯάϧεϨου ඇಉظ IO ϫϯΦϖ

  104. ฒߦॲཧ asyncioの周辺はちょっとこわくない γϯάϧεϨου ඇಉظ IO ϫϯΦϖ 外部のお客様、から 注⽂という ⼊⼒待ちの間に他のことをする

  105. ฒߦॲཧ asyncioの周辺はちょっとこわくない γϯάϧεϨου ඇಉظ IO ϫϯΦϖ 外部のお客様、から 注⽂という ⼊⼒待ちの間に他のことをする 得意なのはI/Oバウンド(ネットワークやDBの⼊出⼒)

  106. asyncio

  107. asyncio🌷

  108. asyncio で 覚えておくことは3つ asyncio

  109. イベントループ

  110. コルーチン イベントループ

  111. コルーチン イベントループ タスク

  112. コルーチン イベントループ タスク → やること

  113. コルーチン イベントループ タスク → やること → やること+実⾏状態をもつ

  114. コルーチン イベントループ タスク → やること → やることを管理するもの → やること+実⾏状態をもつ

  115. コルーチン イベントループ タスク → やること → やることを管理するもの → やること+実⾏状態をもつ

  116. レストラン

  117. 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ

    注⽂を取る - 料理を作る - 料理を運ぶ asyncio
  118. 注⽂を取る - 料理を作る - 料理を運ぶ 注⽂を取る - 料理を作る - 料理を運ぶ

    注⽂を取る - 料理を作る - 料理を運ぶ asyncio コルーチンやタスク
  119. asyncio 注⽂を取 注⽂を取 注⽂を取 コ

  120. asyncio イベントループ 注⽂を取 注⽂を取 注⽂を取 コ

  121. asyncio イベントループ (あくまでイメージ) 注⽂を取 注⽂を取 注⽂を取 コ

  122. コルーチン イベントループ タスク

  123. コルーチン イベントループ タスク

  124. 考え中のお客様

  125. 考え中のお客様 •஫จΛฉ͖ʹ͍͘ •͓٬༷͕೰ΜͰɺɺ஫จΛ͢Δ

  126. asyncioは怖くない

  127. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない

  128. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡

  129. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡

  130. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡ •·ͣ͸ஞ࣍ॲཧͰίʔυΛॻ͍ͯɺͦΕΛίϧʔνϯʹͯ͠Έ·͠ΐ͏

  131. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡ •·ͣ͸ஞ࣍ॲཧͰίʔυΛॻ͍ͯɺͦΕΛίϧʔνϯʹͯ͠Έ·͠ΐ͏ •ίϧʔνϯͷϧʔϧ͸2ͭ

  132. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡ •·ͣ͸ஞ࣍ॲཧͰίʔυΛॻ͍ͯɺͦΕΛίϧʔνϯʹͯ͠Έ·͠ΐ͏ •ؔ਺ͷఆٛʢdefʣͷલʹ async Λ͚ͭΔ •ίϧʔνϯͷϧʔϧ͸2ͭ

  133. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡ •·ͣ͸ஞ࣍ॲཧͰίʔυΛॻ͍ͯɺͦΕΛίϧʔνϯʹͯ͠Έ·͠ΐ͏ •ؔ਺ͷఆٛʢdefʣͷલʹ async Λ͚ͭΔ •ίϧʔνϯΛݺͼग़͢৔߹ʹ͸ await

    Λ͚ͭΔ •ίϧʔνϯͷϧʔϧ͸2ͭ
  134. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡ •·ͣ͸ஞ࣍ॲཧͰίʔυΛॻ͍ͯɺͦΕΛίϧʔνϯʹͯ͠Έ·͠ΐ͏ •͓٬༷͕೰ΜͰɺɺ஫จΛ͢Δ •஫จΛฉ͖ʹ͍͘ •ཁ݅͸̎ͭ

  135. •ා͘ͳ͍ϙΠϯτͦͷ̍ asyncioは怖くない •async/await ͕͍͍ͭͯͯ΋ɺ௨ৗͷؔ਺ͷॲཧͱ͍͍ͩͨಉ͡ •·ͣ͸ஞ࣍ॲཧͰίʔυΛॻ͍ͯɺͦΕΛίϧʔνϯʹͯ͠Έ·͠ΐ͏ •͓٬༷͕೰ΜͰɺɺ஫จΛ͢Δ •஫จΛฉ͖ʹ͍͘ •ཁ݅͸̎ͭ

  136. では定義してみましょう

  137. コルーチンわかったこと ίϧʔνϯͷఆٛ͸asyncΛ͚ͭΔ͚ͩ ͨͩݺͼग़͚ͩ͢Ͱ͸݁ՌΛड͚औΕͳ͍

  138. コルーチン イベントループ タスク

  139. asyncio イベントループ 注⽂を取 注⽂を取 注⽂を取 コ (あくまでイメージ)

  140. •C10K໰୊΁ͷճ౴ •libuv(nodejs)ͷத֩Λͳ͢࢓૊Έ イベントループ

  141. •C10K໰୊΁ͷճ౴ •libuv(nodejs)ͷத֩Λͳ͢࢓૊Έ •ίϧʔνϯ΍λεΫΛεέδϡʔϦϯά イベントループ

  142. •C10K໰୊΁ͷճ౴ •libuv(nodejs)ͷத֩Λͳ͢࢓૊Έ •ڠௐͯ͠ฒߦʹ࣮ߦ͢ΔͨΊͷ࢓૊Έ •ίϧʔνϯ΍λεΫΛεέδϡʔϦϯά イベントループ

  143. •C10K໰୊΁ͷճ౴ •libuv(nodejs)ͷத֩Λͳ͢࢓૊Έ •ڠௐͯ͠ฒߦʹ࣮ߦ͢ΔͨΊͷ࢓૊Έ •ͦ͜·Ͱҙࣝ͠ͳͯ͘΋ྑ͍ʢͦ͜ʹ͍Δ͜ͱ͸஌ͬͯͯʣ •ίϧʔνϯ΍λεΫΛεέδϡʔϦϯά イベントループ

  144. •C10K໰୊΁ͷճ౴ •libuv(nodejs)ͷத֩Λͳ͢࢓૊Έ •ڠௐͯ͠ฒߦʹ࣮ߦ͢ΔͨΊͷ࢓૊Έ •ͦ͜·Ͱҙࣝ͠ͳͯ͘΋ྑ͍ʢͦ͜ʹ͍Δ͜ͱ͸஌ͬͯͯʣ •ίϧʔνϯ΍λεΫΛεέδϡʔϦϯά イベントループ •asyncio ͷத֩Λͳ͢࢓૊Έ

  145. asyncio.run()を使ってみましょう •͓٬༷͕೰ΜͰɺɺ஫จΛ͢Δ •஫จΛฉ͖ʹ͍͘ •ཁ݅͸̎ͭ

  146. コードを⾒⽐べてみましょう

  147. コードのおさらい - 関数 def order(): print(“͝஫จ͸ʁ”) menu = long_thinking() print(menu)

    def long_thinking(): print(“ͪΐͬͱ଴ͬͯͶ”) sleep(10000) return “͟Δͦ͹” order() # ࣮ߦ͢Δ
  148. コードのおさらい - コルーチン async def order(): print(“͝஫จ͸ʁ”) menu = await

    long_thinking() print(menu) async def long_thinking(): print(“ͪΐͬͱ଴ͬͯͶ”) await asyncio.sleep(10000) return “͟Δͦ͹” asyncio.run(order()) # ΠϕϯτϧʔϓΛ࡞Δ
  149. コードのおさらい - コルーチン async def order(): print(“͝஫จ͸ʁ”) menu = await

    long_thinking() print(menu) async def long_thinking(): print(“ͪΐͬͱ଴ͬͯͶ”) await asyncio.sleep(10000) return “͟Δͦ͹” asyncio.run(order()) # ΠϕϯτϧʔϓΛ࡞Δ
  150. イベントループ asyncio.run(order()) # ΠϕϯτϧʔϓΛ࡞Δ •࣮͸͜ΕɺWebͰར༻͢Δ৔߹ʹॻ͘͜ͱ͕ͳ͍৔߹΋͋Δ

  151. イベントループ asyncio.run(order()) # ΠϕϯτϧʔϓΛ࡞Δ •࣮͸͜ΕɺWebͰར༻͢Δ৔߹ʹॻ͘͜ͱ͕ͳ͍৔߹΋͋Δ •ࠓ೔ग़ͯ͘ΔϑϨʔϜϫʔΫͰʢDjango΍FastAPIʣ͸ASGIରԠ

  152. イベントループ asyncio.run(order()) # ΠϕϯτϧʔϓΛ࡞Δ •࣮͸͜ΕɺWebͰར༻͢Δ৔߹ʹॻ͘͜ͱ͕ͳ͍৔߹΋͋Δ •ࠓ೔ग़ͯ͘ΔϑϨʔϜϫʔΫͰʢDjango΍FastAPIʣ͸ASGIରԠ •σϓϩΠ͸UvicornͳͲͷαʔό࢖͍·͢ΑͶ

  153. イベントループ asyncio.run(order()) # ΠϕϯτϧʔϓΛ࡞Δ •࣮͸͜ΕɺWebͰར༻͢Δ৔߹ʹॻ͘͜ͱ͕ͳ͍৔߹΋͋Δ •ࠓ೔ग़ͯ͘ΔϑϨʔϜϫʔΫͰʢDjango΍FastAPIʣ͸ASGIରԠ $ uvicorn example:app •σϓϩΠ͸UvicornͳͲͷαʔό࢖͍·͢ΑͶ

  154. イベントループ asyncio.run(order()) # ΠϕϯτϧʔϓΛ࡞Δ •UvicornͳͲͷWebαʔό͕಺෦Ͱ࣮ߦͯ͘͠Ε͍ͯ·͢ •ͨͩɺͦ͜ʹΠϕϯτϧʔϓ͕͍Δ͜ͱ͸ೝ͓͍ࣝͯͯ͠΄͍͠ workers.py L82 server.py L58

  155. ここまでのまとめ ίϧʔνϯͷఆٛ͸asyncΛ͚ͭΔ͚ͩ

  156. ここまでのまとめ ίϧʔνϯͷఆٛ͸asyncΛ͚ͭΔ͚ͩ ΠϕϯτϧʔϓͰ࣮ߦ͢Δඞཁ͕͋Δ

  157. ここまでのまとめ ίϧʔνϯͷఆٛ͸asyncΛ͚ͭΔ͚ͩ ΠϕϯτϧʔϓͰ࣮ߦ͢Δඞཁ͕͋Δ async/await͕͍͍ͭͯͯ΋ɺஞ࣍ॲཧͱجຊͷྲྀΕ͸มΘ Βͳ͍ ݁ՌΛ଴ͬͯɺ࣍ͷߦͷίʔυ͕࣮ߦ͞ΕΔ

  158. 次に並⾏処理にしてみましょう

  159. 考え中のお客様 3⼈とも

  160. 考え中のお客様 3⼈とも どうせ待つなら同時に 聞いてしまいたい…

  161. 考え中のお客様 3⼈とも どうせ待つなら同時に 聞いてしまいたい… •஫จΛฉ͖ʹ͍͘ •͓٬༷͕೰ΜͰɺɺ஫จΛ͢Δ

  162. 考え中のお客様 3⼈とも どうせ待つなら同時に 聞いてしまいたい… •஫จΛฉ͖ʹ͍͘ •͓٬༷͕೰ΜͰɺɺ஫จΛ͢Δ •ಉ࣌ʹฉ͘

  163. 先ほどのコードをもとに お客様に3回聞いてみましょう

  164. ここまでのまとめ ͨͩɺawait͢Δ͚ͩͰ͸ฒߦʹͳΒͳ͍

  165. ここまでのまとめ ͨͩɺawait͢Δ͚ͩͰ͸ฒߦʹͳΒͳ͍ 1つのコルーチンが終わってから次のコルーチン 普通の関数実⾏と同じ

  166. コルーチン イベントループ タスク

  167. •TaskΦϒδΣΫτ タスク

  168. •TaskΦϒδΣΫτ •ίϧʔνϯΛϥοϓ͠ɺ࣮ߦঢ়ଶΛ΋ͭ タスク

  169. •TaskΦϒδΣΫτ •ίϧʔνϯΛϥοϓ͠ɺ࣮ߦঢ়ଶΛ΋ͭ •Πϕϯτϧʔϓʹొ࿥͢Δ タスク

  170. •TaskΦϒδΣΫτ •ίϧʔνϯΛϥοϓ͠ɺ࣮ߦঢ়ଶΛ΋ͭ •࡞Δํ๏Ͱɺ·֮ͣ͑Δͷ͸2ͭ •Πϕϯτϧʔϓʹొ࿥͢Δ タスク

  171. •TaskΦϒδΣΫτ •ίϧʔνϯΛϥοϓ͠ɺ࣮ߦঢ়ଶΛ΋ͭ •࡞Δํ๏Ͱɺ·֮ͣ͑Δͷ͸2ͭ •Python3.7 Ͱ௥Ճ͞Εͨ asyncio.create_task() •Πϕϯτϧʔϓʹొ࿥͢Δ •ฒྻ࣮ߦΛॿ͚Δ asyncio.gather() タスク

  172. タスクを作ってみましょう

  173. ここまでのまとめ タスクはただ作っただけでは実⾏されない

  174. ここまでのまとめ await ͢Δඞཁ͕͋Δ タスクはただ作っただけでは実⾏されない

  175. ここまでのまとめ await ͢Δඞཁ͕͋Δ タスクはただ作っただけでは実⾏されない awaitは中断と再開のキーとなる

  176. ここまでのまとめ await ͢Δඞཁ͕͋Δ タスクはただ作っただけでは実⾏されない awaitは中断と再開のキーとなる awaitΛΩʔʹΠϕϯτϧʔϓ͕λεΫΛ੾Γସ͑ɺ ॲཧΛฒߦʹ͢Δʂ gatherは便利

  177. asyncio ⾮同期IO

  178. シンプルな asyncio のサンプル async def long_thinking(): print(“ͪΐͬͱ଴ͬͯͶ”) await asyncio.sleep(10000) return

    “͟Δͦ͹”
  179. シンプルな asyncio のサンプル async def long_thinking(): print(“ͪΐͬͱ଴ͬͯͶ”) await asyncio.sleep(10000) return

    “͟Δͦ͹” asyncio.sleep(10000)
  180. ⾮同期IO - asyncio asyncio.sleep(10000)

  181. ⾮同期IO - asyncio asyncio.sleep(10000) 外部⼊⼒を待つ状態

  182. ⾮同期IO - asyncio asyncio.sleep(10000) 外部⼊⼒を待つ状態 •I/Oό΢ϯυ

  183. ⾮同期IO - asyncio •I/Oό΢ϯυ •σʔλϕʔε΁ͷ઀ଓ •WebAPIͷར༻ʹΑΔHTTPϦΫΤετ

  184. 考え中のお客様 asyncio.sleep(10000)

  185. 考え中のお客様 検索しないと決められない asyncio.sleep(10000)

  186. 考え中のお客様 検索しないと決められない asyncio.sleep(10000) 3⼈とも

  187. 考え中のお客様 検索しないと決められない asyncio.sleep(10000) HTTP通信 I/Oバウンド 3⼈とも

  188. 考え中のお客様 検索しないと決められない asyncio.sleep(10000) HTTP通信 I/Oバウンド 3⼈とも requests

  189. 外部I/Oのある処理を書いてみましょう

  190. ここまでのまとめ asyncioでHTTP通信をするにはrequestsではだめ

  191. asyncio イベントループ 注⽂を取 注⽂を取 注⽂を取 コ (あくまでイメージ)

  192. 外部I/Oのある処理を書いてみましょう

  193. 外部I/Oのある処理を書いてみましょう asyncio対応のライブラリで

  194. ここまでのまとめ asyncioでHTTP通信をするにはrequestsではだめ asyncioରԠͷϥΠϒϥϦͰɺI/O͢Δඞཁ͕͋Δ

  195. ίϧʔνϯ asyncioはこわくない λεΫ Πϕϯτϧʔϓ

  196. ίϧʔνϯ asyncioはこわくない λεΫ Πϕϯτϧʔϓ ؔ਺ʹ async Λ͚ͭΔ͚ͩ ؊͸await

  197. ίϧʔνϯ asyncioはこわくない λεΫ Πϕϯτϧʔϓ ੾ΓସΘΔઌͷίϧʔνϯɻΠϕϯτϧʔϓʹొ࿥͓ͯ͘͠ͱ ྑ͖ʹܭΒͬͯ੾Γସ͑ͯ͘ΕΔɻ ؔ਺ʹ async Λ͚ͭΔ͚ͩ ؊͸await

  198. ίϧʔνϯ asyncioはこわくない λεΫ Πϕϯτϧʔϓ ੾ΓସΘΔઌͷίϧʔνϯɻΠϕϯτϧʔϓʹొ࿥͓ͯ͘͠ͱ ྑ͖ʹܭΒͬͯ੾Γସ͑ͯ͘ΕΔɻ 登録してあるタスクをawait のタイミングで切り替える。 ただしasyncio対応が必要。 ؔ਺ʹ

    async Λ͚ͭΔ͚ͩ ؊͸await
  199. ίϧʔνϯ asyncioはこわくない λεΫ Πϕϯτϧʔϓ create_task(ίϧʔνϯ) - Πϕϯτϧʔϓʹొ࿥ gather(λεΫ ·ͨ͸ ίϧʔνϯ)

    - ·ͱΊͯ݁ՌΛड͚औΕΔ async def await λεΫ ·ͨ͸ ίϧʔνϯ asynio.run(ίϧʔνϯ)
  200. ίϧʔνϯ asyncioはこわくない λεΫ Πϕϯτϧʔϓ create_task(ίϧʔνϯ) - Πϕϯτϧʔϓʹొ࿥ gather(λεΫ ·ͨ͸ ίϧʔνϯ)

    - ·ͱΊͯ݁ՌΛड͚औΕΔ async def await λεΫ ·ͨ͸ ίϧʔνϯ asynio.run(ίϧʔνϯ) まずはこれを抑えましょう
  201. asyncioはこわくない Πϕϯτϧʔϓ loopΦϒδΣΫτ 触れてないもの

  202. asyncioはこわくない Πϕϯτϧʔϓ 触れてないもの futureΦϒδΣΫτ loopΦϒδΣΫτ

  203. asyncioはこわくない Πϕϯτϧʔϓ 触れてないもの futureΦϒδΣΫτ loopΦϒδΣΫτ ެࣜυΩϡϝϯτɿ௿ϨϕϧAPIʹ෼ྨ

  204. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ

  205. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ

  206. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ python

    core developer Yury Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ ͷొஃ PEP 492 -- Coroutines with async and await syntax ஶऀ europython 2018 - Asyncio in Python 3 7 and 3 8
  207. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ Yury

    Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ PEP 492 -- Coroutines with async and await syntax ஶऀ
  208. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ Yury

    Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ PEP 492 -- Coroutines with async and await syntax ஶऀ normal ϋʔυίΞ
  209. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ Yury

    Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ PEP 492 -- Coroutines with async and await syntax ஶऀ
  210. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ python

    core developer Yury Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ ͷొஃ PEP 492 -- Coroutines with async and await syntax ஶऀ europython 2018 - Asyncio in Python 3 7 and 3 8
  211. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ python

    core developer Yury Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ ͷొஃ PEP 492 -- Coroutines with async and await syntax ஶऀ europython 2018 - Asyncio in Python 3 7 and 3 8 Python 3.10 ߴϨϕϧAPI(gather/wait/sleep … ) ͷҾ਺ʹloopΦϒδΣΫτͷࢦఆ͕ෆՄ
  212. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ python

    core developer Yury Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ ͷొஃ PEP 492 -- Coroutines with async and await syntax ஶऀ europython 2018 - Asyncio in Python 3 7 and 3 8 Python 3.10 ߴϨϕϧAPI(gather/wait/sleep … ) ͷҾ਺ʹloopΦϒδΣΫτͷࢦఆ͕ෆՄ loopΦϒδΣΫτ΍futureΦϒδΣΫτΛҙࣝͤͣʹasyncioར༻Մೳʹ
  213. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ python

    core developer Yury Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ ͷొஃ PEP 492 -- Coroutines with async and await syntax ஶऀ europython 2018 - Asyncio in Python 3 7 and 3 8 Python 3.10 ߴϨϕϧAPI(gather/wait/sleep … ) ͷҾ਺ʹloopΦϒδΣΫτͷࢦఆ͕ෆՄ loopΦϒδΣΫτ΍futureΦϒδΣΫτΛҙࣝͤͣʹasyncioར༻Մೳʹ Ξοϓσʔτ͕଎͍
  214. asyncioはこわくない 緩やかな根拠 Python 3.7 ͷΞοϓσʔτ asyncio.create_task(), asyncio.gather(), asyncio.run() ͷ௥Ճ python

    core developer Yury Selivanov ʢϢʔϦʔηϦόϊϑʣࢯ ͷొஃ PEP 492 -- Coroutines with async and await syntax ஶऀ europython 2018 - Asyncio in Python 3 7 and 3 8 Python 3.10 ߴϨϕϧAPI(gather/wait/sleep … ) ͷҾ਺ʹloopΦϒδΣΫτͷࢦఆ͕ෆՄ loopΦϒδΣΫτ΍futureΦϒδΣΫτΛҙࣝͤͣʹasyncioར༻Մೳʹ Ξοϓσʔτ͕଎͍ ༗༻ͳαϯϓϧίʔυ΋աڈͷόʔδϣϯΛϕʔεʹ͍ͯ͠Δ΋ͷ΋ଟ͍
  215. asyncioの話まとめ

  216. まとめ •asyncio ଟগ͜Θ͘ͳ͘ͳͬͨͰ͠ΐ͏͔ コ

  217. まとめ •asyncio ଟগ͜Θ͘ͳ͘ͳͬͨͰ͠ΐ͏͔ コ •3.7Ҏ߱ߴϨϕϧAPI͕ॆ࣮ ௚ײతͰΘ͔Γ΍͘͢

  218. まとめ •asyncio ଟগ͜Θ͘ͳ͘ͳͬͨͰ͠ΐ͏͔ コ •ਐԽͷૣ͍asyncio •3.7Ҏ߱ߴϨϕϧAPI͕ॆ࣮ ௚ײతͰΘ͔Γ΍͘͢

  219. まとめ •asyncio ଟগ͜Θ͘ͳ͘ͳͬͨͰ͠ΐ͏͔ コ •ਐԽͷૣ͍asyncio •3.7Ҏ߱ߴϨϕϧAPI͕ॆ࣮ ௚ײతͰΘ͔Γ΍͘͢ •࣮͸3.11Ͱࠓ೔͝঺հͨ͠಺༰͕Ұ෦௠෗Խͯ͠͠·͏͔΋ʁ

  220. まとめ •asyncio ଟগ͜Θ͘ͳ͘ͳͬͨͰ͠ΐ͏͔ コ •ਐԽͷૣ͍asyncio •3.7Ҏ߱ߴϨϕϧAPI͕ॆ࣮ ௚ײతͰΘ͔Γ΍͘͢ •࣮͸3.11Ͱࠓ೔͝঺հͨ͠಺༰͕Ұ෦௠෗Խͯ͠͠·͏͔΋ʁ •PyConJP 2022

    2022.10.14(Fri)-15(Sat) Ͱ͝঺հͰ͖Ε͹ʂͱࢥ͍·͢
  221. まとめ •asyncio ଟগ͜Θ͘ͳ͘ͳͬͨͰ͠ΐ͏͔ コ •ਐԽͷૣ͍asyncio •3.7Ҏ߱ߴϨϕϧAPI͕ॆ࣮ ௚ײతͰΘ͔Γ΍͘͢ •࣮͸3.11Ͱࠓ೔͝঺հͨ͠಺༰͕Ұ෦௠෗Խͯ͠͠·͏͔΋ʁ •PyConJP 2022

    2022.10.14(Fri)-15(Sat) Ͱ͝঺հͰ͖Ε͹ʂͱࢥ͍·͢ •΋ͬͱasyncio΍ଞͷʹ͍ͭͯ஌Γ͍ͨʂ
  222. まとめ •asyncio ଟগ͜Θ͘ͳ͘ͳͬͨͰ͠ΐ͏͔ コ •ਐԽͷૣ͍asyncio •3.7Ҏ߱ߴϨϕϧAPI͕ॆ࣮ ௚ײతͰΘ͔Γ΍͘͢ •࣮͸3.11Ͱࠓ೔͝঺հͨ͠಺༰͕Ұ෦௠෗Խͯ͠͠·͏͔΋ʁ •PyConJP 2022

    2022.10.14(Fri)-15(Sat) Ͱ͝঺հͰ͖Ε͹ʂͱࢥ͍·͢ •΋ͬͱasyncio΍ଞͷʹ͍ͭͯ஌Γ͍ͨʂ •͓͢͢Ίίϯςϯπͨ͘͞Μ͋Γ·͢ʂʢँࣙγʔτͰʣ
  223. •ίϧʔνϯ͸ා͘ͳ͍ - Minimum Viable Programmer https://www.rhoboro.com/2019/02/09/coroutine-abstract.html •Using Asyncio in Python

    - Oreilly & Associates Inc 謝辞 •Yury Selivanov - Asyncio in Python 3 7 and 3 8 https://www.youtube.com/watch?v=ReXxO_azV-w •asyncioͷTaskʹؔ͢Δجૅ஌ࣝ https://aish.dev/python/20200711_asyncio_task.html •To many many internet articles, great books and member. 🙏
  224. •࣮૷Ͱ஌Δasyncio -Πϕϯτϧʔϓͷਖ਼ମͱ͸ Rei Suyama - PyCon JP 2021 https://www.youtube.com/watch?v=O0Uwz2l_A_Q 謝辞

    •Artisanal Async Adventures Jonas Obrist - PyCon APAC 2018 https://www.youtube.com/watch?v=IbwirUn9ubA •To many many internet articles, great books and member. 🙏 •async await ͷ޲͜͏ଆ Atsushi Odagiri - PyConKyushu 2022 https://www.youtube.com/watch?v=ClSeOPoUH7c
  225. ご静聴ありがとうございました 👋