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.1k
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.1k
Django & Celery in production
massa142
3
5.4k
Other Decks in Programming
See All in Programming
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
230
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
340
週次リリースを実現するための グローバルアプリ開発
tera_ny
1
110
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
8
2k
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1k
良いユニットテストを書こう
mototakatsu
9
3.2k
Jakarta EE meets AI
ivargrimstad
0
290
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
960
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
130
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
750
情報漏洩させないための設計
kubotak
4
890
Оптимизируем производительность блока Казначейство
lamodatech
0
360
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
328
21k
A designer walks into a library…
pauljervisheath
205
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Unsuck your backbone
ammeep
669
57k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Building Applications with DynamoDB
mza
91
6.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Embracing the Ebb and Flow
colly
84
4.5k
The Language of Interfaces
destraynor
155
24k
4 Signs Your Business is Dying
shpigford
182
21k
Statistics for Hackers
jakevdp
796
220k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
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