SlideShare a Scribd company logo
Pythonの⾮同期処理を始める前に
Pythonの⾮同期周りの話
by@koralle_tech 1
Introduction
username:koralle
Twitter:@koralle_tech
WebDeveloper1st
Language:TypeScript(React),Python,
Swift
Cloud:GCP,AWS
GoとRustが書きたい...
Pythonの⾮同期周りの話
by@koralle_tech 2
3つの問いに答えられることを⽬標にします
.以下の3つのPython標準ライブラリの違いはそれぞれ何です
か?
multiprocessing
threading
asyncio
.⾮同期処理とはなんですか?
.asyncioが⾮同期処理を実現する仕組みは何ですか?
Pythonの⾮同期周りの話
by@koralle_tech 3
Q1.以下の3つのPython標準ライブラリの違いはそ
れぞれ何ですか?
multiprocessing
threading
asyncio
Pythonの⾮同期周りの話
by@koralle_tech 4
並列処理、並⾏処理
並列処理
1つのタスク(処理)をより細かいタスクに分割し、
複数のプロセッサで並列に処理する
並⾏処理
1つのプロセッサ上でタスクを瞬時に切り替えることで、
複数のタスクを同時に処理している様に⾒せる
(このタスク切り替え動作をコンテキストスイッチという)
Pythonの⾮同期周りの話
by@koralle_tech 5
並列処理と並⾏処理の違いを図にしてみる
Pythonの⾮同期周りの話
by@koralle_tech 6
multiprocessing,threading,asycio
multiprocessing
プロセスベースで並列処理を実⾏する
threading
スレッドベースで並列処理を実⾏する
asyncio
⾮同期I/Oを利⽤してシングルスレッド処理を並⾏実⾏する
Pythonの⾮同期周りの話
by@koralle_tech 7
Q2.⾮同期処理って何ですか?
Pythonの⾮同期周りの話
by@koralle_tech 8
⾮同期処理って何?
あるタスクの実⾏中に他のタスクを実⾏できる仕組み。
⾮同期I/Oという⽤語もほぼ同じ意味で使⽤されている。
⾮同期処理の特徴
タスクの実⾏順=タスクの終了順とは限らない
⾮同期タスクは処理が完了したらその旨を呼び出し元に通知
する
Pythonの⾮同期周りの話
by@koralle_tech 9
ノンブロッキングIO≠⾮同期IO
同期/⾮同期とブロッキング/ノンブロッキングはそれぞれ分けて考
える必要があります。
Pythonの⾮同期周りの話
by@koralle_tech 10
同期的なブロッキングIO
BoostapplicationperformanceusingasynchronousI/O–IBM
Developer
Pythonの⾮同期周りの話
by@koralle_tech 11
ノンブロッキングIO=同期的なノンブロッキング
IO
BoostapplicationperformanceusingasynchronousI/O–IBM
Developer
Pythonの⾮同期周りの話
by@koralle_tech 12
⾮同期IO=⾮同期なノンブロッキングIO
BoostapplicationperformanceusingasynchronousI/O–IBM
Developer
Pythonの⾮同期周りの話
by@koralle_tech 13
Q3.asyncioが⾮同期処理を実現する仕組みは何で
すか?
Pythonの⾮同期周りの話
by@koralle_tech 14
asyncioの根幹はイベントループ
Pythonの⾮同期周りの話
by@koralle_tech 15
Pythonの⾮同期周りの話
by@koralle_tech 16
まとめ
Pythonの⾮同期周りの話
by@koralle_tech 17
Q1.以下の3つのPython標準ライブラリの違いはそれぞれ何
ですか?
multiprocessingはプロセスベースで並列処理を実⾏する
threadingはスレッドベースで並列処理を実⾏する
asyncioは⾮同期I/Oを利⽤してシングルスレッド処理を並⾏
実⾏する
Q2.⾮同期処理とはなんですか?
あるタスクの実⾏中に他のタスクを実⾏できる仕組み。
Q3.asyncioが⾮同期処理を実現する仕組みは何ですか?
イベントループが時間のかかる処理を他のプロセス(スレッ
ド)に上⼿く委譲している。
Pythonの⾮同期周りの話
by@koralle_tech 18
参考
AsyncIOinPython:ACompleteWalkthrough
イベントループが何かわからないので調べてみた-Qiita
Python なんとなく理解するasyncio
Python3'sKillerFeature:asyncio
AsynchronousPythonwithgeventandasyncIO
Pythonの⾮同期周りの話
by@koralle_tech 19

More Related Content

ODP
Guide To AGPL
PPTX
本当は恐ろしい分散システムの話
PDF
明日使えないすごいビット演算
PDF
Union find(素集合データ構造)
PDF
Rustに触れて私のPythonはどう変わったか
PDF
その ionice、ほんとに効いてますか?
PPTX
NDC 11 자이언트 서버의 비밀
PDF
テスト文字列に「うんこ」と入れるな
Guide To AGPL
本当は恐ろしい分散システムの話
明日使えないすごいビット演算
Union find(素集合データ構造)
Rustに触れて私のPythonはどう変わったか
その ionice、ほんとに効いてますか?
NDC 11 자이언트 서버의 비밀
テスト文字列に「うんこ」と入れるな

What's hot (20)

PDF
Vacuum徹底解説
ODP
GNU AGPLv3について(On GNU AGPLv3)
PDF
Dockerからcontainerdへの移行
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
3次元レジストレーション(PCLデモとコード付き)
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
PDF
はじめようRGB-Dセンシングと画像処理
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
暗号文のままで計算しよう - 準同型暗号入門 -
PDF
SAT/SMTソルバの仕組み
PPTX
世界一わかりやすいClean Architecture
PDF
暗号技術の実装と数学
PDF
.NET Core 3.0時代のメモリ管理
PPTX
C#言語機能の作り方
PDF
Gazebo/ROSで力覚センサプラグインを使う
PDF
30分で分かる!OSの作り方 ver.2
PPTX
DockerコンテナでGitを使う
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PPTX
Slurmのジョブスケジューリングと実装
PDF
雑なMySQLパフォーマンスチューニング
Vacuum徹底解説
GNU AGPLv3について(On GNU AGPLv3)
Dockerからcontainerdへの移行
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
3次元レジストレーション(PCLデモとコード付き)
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
はじめようRGB-Dセンシングと画像処理
新入社員のための大規模ゲーム開発入門 サーバサイド編
暗号文のままで計算しよう - 準同型暗号入門 -
SAT/SMTソルバの仕組み
世界一わかりやすいClean Architecture
暗号技術の実装と数学
.NET Core 3.0時代のメモリ管理
C#言語機能の作り方
Gazebo/ROSで力覚センサプラグインを使う
30分で分かる!OSの作り方 ver.2
DockerコンテナでGitを使う
コンテナの作り方「Dockerは裏方で何をしているのか?」
Slurmのジョブスケジューリングと実装
雑なMySQLパフォーマンスチューニング
Ad

Similar to Pythonの非同期処理を始める前に (11)

PDF
Pythonによる非同期プログラミング入門
PDF
async/await の向こう側 PyCon Kyushu 2022
PDF
Node.js入門
PDF
これからの「async/await」の話をしよう
PDF
JavaScriptの非同期処理
PPTX
非同期系統の基礎
PPTX
非同期処理の基礎
PDF
async/await不要論
PDF
パターンでわかる! .NET Coreの非同期処理
PPTX
イベント駆動プログラミングとI/O多重化
Pythonによる非同期プログラミング入門
async/await の向こう側 PyCon Kyushu 2022
Node.js入門
これからの「async/await」の話をしよう
JavaScriptの非同期処理
非同期系統の基礎
非同期処理の基礎
async/await不要論
パターンでわかる! .NET Coreの非同期処理
イベント駆動プログラミングとI/O多重化
Ad

Pythonの非同期処理を始める前に