Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Event-driven programming
Search
massa142
October 13, 2021
Programming
1
1.3k
Event-driven programming
みんなのPython勉強会 #74 の発表資料。
イベント駆動型プログラミングの3つのパターン Callback・Subject・Topic について紹介します。
massa142
October 13, 2021
Tweet
Share
More Decks by massa142
See All by massa142
Event-driven architecture
massa142
4
4.4k
Django & Celery in production
massa142
3
6.1k
Other Decks in Programming
See All in Programming
コンテキストエンジニアリング Cursor編
kinopeee
1
740
個人軟體時代
ethanhuang13
0
290
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
3
1.1k
MCPで実現するAIエージェント駆動のNext.jsアプリデバッグ手法
nyatinte
7
1k
AIエージェント開発、DevOps and LLMOps
ymd65536
1
370
Testing Trophyは叫ばない
toms74209200
0
220
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
370
パスタの技術
yusukebe
1
560
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
19
4.3k
Kiroの仕様駆動開発から見えてきたAIコーディングとの正しい付き合い方
clshinji
1
190
Claude Codeで挑むOSSコントリビュート
eycjur
0
190
複雑なドメインに挑む.pdf
yukisakai1225
5
920
Featured
See All Featured
Building Adaptive Systems
keathley
43
2.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
The Invisible Side of Design
smashingmag
301
51k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
The Cult of Friendly URLs
andyhume
79
6.6k
Transcript
イベント駆動型プログラミングについて みんなのPython勉強会 #74 2021/10/13 | Masataka Arai
お前誰よ? Masataka Arai @massa142 SQUEEZE Inc. Pythonもくもく会 主催 Python Boot
Camp 講師 2
宣伝! 3
4
@iktakahiro とポッドキャスト最近はじめました 次回は @iktakahiro が、PyCon JP 2021で登壇した直後に収録! 熱い登壇後記を話す予定です connpassでもイベント立てるので、みんな参加してねー 2021.10.14
『コードと文学』第6夜 - Show note 5
今日はイベント駆動型プログラミングについて、ざっと話そうと思います。 6
目次 イベント駆動型プログラミングとは イベント駆動型プログラミングの3パターン Callback Subject Topic イベント駆動型アーキテクチャへ 7
イベント駆動型プログラミングとは 8
上から下に順に処理が実行される(手続き型プログラミング)のではなく、 特定のイベントが発生したら処理を実行してねっていう手法 9
GUIだとユーザーの操作・入力はすべてイベントなので、フロントエンドでは必ず必要 になってくる フロントエンドだけでじゃなくて、DBのトリガもイベント駆動型の一種 トリガ: あるテーブルにINSERTやUPDATE、DELETE文を実行したタイミングで、 ストアドプロシージャを呼び出す機能 というわけで、バックエンドでもよく使うやり方だよ 10
イベント駆動型プログラミングの3パターン 11
1. Callback 12
Callback イベントに対する処理 (コールバック関数) を実装して、あらかじめ登録しておく そのイベントが発生したら、コールバック関数が呼び出される ※ イベントループがイベントの監視と、コールバック関数への振り分けをしている 13
イメージ図 14
JavaScriptでの例 setTimeout(() => { alert('#stapy') }, 1000); 15
特徴 シンプルでわかりやすい! 1つのイベントに紐付けられるコールバック関数は1つだけ 16
2. Subject 17
Subject Subjectが発生させるイベントを、複数のObserverが購読する 18
イメージ図 Ref: Observer Pattern in Java. “Life was always a
matter of waiting… | by Arjun Sunil Kumar 19
特徴 Callbackと違って、複数のイベントハンドラを登録できる Subjectが発生させるすべてのイベントがObserverに通知される Observerが欲しいイベントをフィルタリングする or イベントの種類ごとにSubjectを分ける 大規模になると、複雑にはなる Callbackよりも疎結合で、次に紹介するTopicよりも密結合 個人的には、ロジックを把握しやすいのでメインとなるロジックに適用するのがお すすめ
20
3. Topic 21
Topic イベントの定義からはじまる イベントを発生させる存在がなくても、そのイベントを購読可能 だれも購読してないイベントを発生可能 イベントが、発生する側・購読する側に依存してない ※ このイベントのことは、トピックと 呼ばれたりシグナルと呼ばれたりします(ややかしいで すね! ※
Django, Flask, Scrapyなどはシグナルという用語を使ってる 22
Djangoでの例 from django.db.models.signals import post_save from django.dispatch import receiver from
django.core.mail import send_mail from .models import User @receiver(post_save, sender=User) def send_registered_mail_handler(sender, instance, created, **kwargs): if created: send_mail(' タイトル', ' 本文', '
[email protected]
', [instance.email]) 23
特徴 発生する側・購読する側が疎結合なので、イベントの種類を細かく分割して設計しやす い 疎結合すぎる面もあるので、知らないうちにイベントを購読していて処理が実行されて いるということも起こりがち 個人的には、メインロジックではなく補助的な処理を書くのがおすすめ 24
イベント駆動型アーキテクチャへ 25
イベント駆動型プログラミングは、アプリケーションの部品を分解して、部品間のやり 取りをイベントでやっている この分解のスコープを広げて、やり取りをネットワーク越しにするようになったのがイ ベント駆動アーキテクチャ 26
メリット 時間がかかる処理などを非同期に逃がせる HTTPリクエストをより多く処理できるように 処理を分散できるので、スケールがしやすい エラーが発生してもリトライできるので、復元力の高いシステムに デメリット アーキテクチャが複雑になる 監視・ログなどの考えごとが増える 処理の遅延が大きくなりうる 27
イベント駆動アーキテクチャ・非同期タスクについては、DjangoCongress JP 2021で話した ので、詳しくはこちらをどうぞ! Django & Celery in production -
Speaker Deck 28
おわりに 29
イベント駆動型プログラミングには3つのパターンがあるよ Callback・Subject・Topic それぞれメリット・デメリットがあるから、用法用量を守って使っていきましょう イベント駆動型プログラミングの発展として、イベント駆動アーキテクチャも見てみよ う 30
参考文献 エキスパートPythonプログラミング 改訂3版 第16章「イベント駆動型プログラミング」 31
ご静聴ありがとうございました 32