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
Python アプリケーションの裏側とその機序 -WSGI, ASGI 編-
Search
himura467
June 01, 2025
Technology
78
0
Share
Python アプリケーションの裏側とその機序 -WSGI, ASGI 編-
himura467
June 01, 2025
More Decks by himura467
See All by himura467
基盤モデルのアーキテクチャを改造してみよう - 時系列基盤モデルのマルチモーダル拡張事例の紹介 -
himura
1
1.2k
人生における期待効用の最大化について考える
himura
0
120
CA_kube-scheduler
himura
0
15
Other Decks in Technology
See All in Technology
ブラックボックス化したMLシステムのVertex AI移行 / mlops_community_62
visional_engineering_and_design
1
240
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
130
Podcast配信で広がったアウトプットの輪~70人と音声発信してきた7年間~/outputconf_01
fortegp05
0
120
Move Fast and Break Things: 10 in 20
ramimac
0
100
来期の評価で変えようと思っていること 〜AI時代に変わること・変わらないこと〜
estie
0
120
パワポ作るマンをMCP Apps化してみた
iwamot
PRO
0
250
脳が溶けた話 / Melted Brain
keisuke69
1
1.1k
SaaSに宿る21g
kanyamaguc
2
180
スケーリングを封じられたEC2を救いたい
senseofunity129
0
130
QA組織のAI戦略とAIテスト設計システムAITASの実践
sansantech
PRO
1
260
15年メンテしてきたdotfilesから開発トレンドを振り返る 2011 - 2026
giginet
PRO
2
240
The essence of decision-making lies in primary data
kaminashi
0
190
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
170
Crafting Experiences
bethany
1
100
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
93
Believing is Seeing
oripsolob
1
100
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
300
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Transcript
ͻΉΒ 1ZUIPOΞϓϦέʔγϣϯͷཪଆͱͦͷػং 84(* "4(*ฤ 2025.5.31 1
͓ͼ Gomen 2025.5.31 2 ͓ͼ
%PDLFSͷ·ͰḷΓண͚ͳ͔ͬͨʜ Moushiwakenai 2025.5.31 5 ͓ͼ 3
8FCΞϓϦέʔγϣϯͷཪଆ Web Application Backyard 2025.5.31 4 8FCΞϓϦͷཪଆ
8FCͷΈ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 5 Ϣʔβʔ͕ϒϥβʹΞΫηε͢Δͱ͖ɺཪଆͰԿ͕ى͍ͬͯ͜Δʁ ૉͳٙ
8FCͷΈ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 6 URL Web
Server Browser HTTP HTML DB ੩తίϯςϯπΛ৴͢Δ߹ nginx apache
8FCͷΈ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 7 Web Server
Browser HTTP HTML ಈతίϯςϯπΛ৴͢Δ߹ Application Server HTTP HTML DB WebSocket Frame WebSocket Frame
ίϯϐϡʔλͷཪଆ Computer Backyard 2025.5.31 8 ίϯϐϡʔλͷཪଆ
ύιίϯങ͏࣌ͱ͔ʜ Buying new PC 2025.5.31 5 ίϯϐϡʔλͷཪଆ 9
ύιίϯങ͏࣌ͱ͔ʜ Buying new PC 2025.5.31 5 ίϯϐϡʔλͷཪଆ 10
$16ͷཪଆ CPU backyard 2025.5.31 5 ίϯϐϡʔλͷཪଆ 11 CPU ίΞ ্ͷྫͰίΞ
Web Server εϨου ্ͷྫͰίΞ Memory CPU(non-SMT) Core Core Core ϓϩηε $16࣌ؒ୯ҐͰׂΓৼΒΕΔ ϓϩάϥϜͷ࣮ߦ୯Ґ εϨου $16Λར༻͢ΔͨΊͷ࣮ߦ୯Ґ ࠷খॲཧ୯Ґ Process Thread Thread Thread Process Thread Core
ϓϩηεͷத Process backyard 2025.5.31 5 ίϯϐϡʔλͷཪଆ 12 Memory Process Text
Segment Data Segment Process Text Segment Data Segment Text Segment Data Segment ϓϩάϥϜͷ໋ྩྻ ͪΖΜ໋ྩػցޠ 3FBE0OMZ ɾ11%" 1FS1SPDFTT%BUB"SFB ε λ ο Ϋ ϙΠ ϯ λɺ ϓ ϩ ά ϥϜ Χ ϯ λ ͳ ͲΧʔωϧͷ࣮ߦใΛอ࣋͢Δ ɾσʔλྖҬ ɹɾ੩తྖҬ ɹఆάϩʔόϧม ɹɾώʔϓྖҬ ɹ௨ৗͷมͳͲ ɾελοΫྖҬ ҾϩʔΧϧείʔϓͳͲͷҰ࣌σʔλ
8FCαʔόͷཪଆ Web Server Backyard 2025.5.31 13 8FCαʔόͷཪଆ
8FCͷฒྻॲཧ Parallel Processing 2025.5.31 5 8FCΞϓϦͷཪଆ 14 ʮαʔό͕ෳ্ཱ͕͍ͪͬͯΔʯ ʮϫʔΧ͕ϝϞϦΛ৯͍௵ͯ͠ࢮΜͩʯ ˢԿͷʁʁ
Ϛϧνϓϩηε Multi Process 2025.5.31 5 8FCαʔόͷཪଆ 15 Memory Process Text
Segment Data Segment ࢠProcess Data Segment ෳͷϓϩηεΛฒྻॲཧ͢Δ͜ͱ ࢠϓϩηεΛෳ্ཱͪ͛ͯฒྻʹಈ͔͢ σʔληάϝϯτͷΈίϐʔ͢Δ ίϐʔ ɾϓϩηεؒͷϝϞϦΛࢀরͰ͖ͳ͍
ϚϧνεϨου Multi Thread 2025.5.31 5 8FCαʔόͷཪଆ 16 Memory Process Text
Segment Data Segment Thread ϓϩηε͔ΒεϨουΛੜ͢Δ ϓϩηεͷྖҬʹεϨουΛෳ্ཱͪ͛ͯ ฒྻʹಈ͔͢ Stack Area Stack Area ίϐʔ ɾϝϞϦۭ͕֤ؒεϨουͷؒͰڞ༗Մೳ ɾϝϞϦۭؒͷΓସ͕͑গͳ͍ɺϝϞϦফඅྔ ɹίϯςΩετεΠονͷΦʔόʔϔου͕খ͍͞
8FCαʔόͷΞʔΩςΫνϟ .1. Web Server Architecture 2025.5.31 17 8FCαʔόͷΞʔΩςΫνϟ
QSFGPSL prefork 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 18 Web Server BQBDIFͰσϑΥϧτͰ࠾༻ Ϛϧνϓϩηε
ϦΫΤετͱϓϩηε͕ରͰରԠ ͭͷϓϩηε่͕յͯ͠ଞͷϓϩηεແࣄ αʔόৗʹز͔ͭͷΞΠυϧͳαʔόϓϩηεΛҡ͍࣋ͯͯ͠ɺ ͦΕΒೖ͖ͬͯͨϦΫΤετʹԠͰ͖ΔΑ͏ʹػ͍ͯ͠Δ ͜ͷΑ͏ʹͯ͠ΫϥΠΞϯτɺϦΫΤετ͕Ԡ͞ΕΔલʹ৽͍͠ࢠϓϩηε͕ GPSL͞ΕΔͷΛͨͳͯ͘Α͍Α͏ʹͳ͍ͬͯΔʢQSFGPSLʣ
XPSLFS worker 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 19 Web Server ϚϧνϓϩηεͱϚϧνεϨουͷϋΠϒϦουܕ ֤ࢠϓϩηεͰෳͷεϨου͕ฒྻ࣮ߦ
ϦΫΤετͱεϨου͕ରͰରԠ αʔόৗʹز͔ͭͷΞΠυϧͳαʔόεϨουͷϓʔϧΛৗʹҡ͍࣋ͯͯ͠ ͦΕΒೖͬͯ͘ΔϦΫΤετʹԠ͑ΒΕΔΑ͏ʹػ͍ͯ͠Δ ىಈॳظ࣌ͷϓϩηε૯StartServers σΟϨΫςΟϒͰઃఆ͞ΕΔ ՔಇதʹαʔόશϓϩηεͷΞΠυϧεϨουͷ߹ܭΛݟੵΓ MinSpareThreads ͱ .BY4QBSF5ISFBET Ͱࢦఆ͞Εͨൣғͷதʹ ͜ͷ͕ऩ·ΔΑ͏ʹGPSLͨ͠ΓLJMMͨ͠Γͯ͠͏·͍͜ͱௐ͢Δ
$L C10k Problem 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 20 ϚϧνϓϩηεϚϧνεϨουؔͳ͘ಉ࣌ଓ͕૿͑Δ͜ͱʹΑΓ ϝϞϦ͕ѹഭ͞ΕΔઃܭ prefork,worker
ͩͱ Ͳ͏ͯ͠ಉ࣌ଓͷ૿Ճʹͬͯαʔό͕ࢮ͵
FWFOU event 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 21 Web Server OHJOYͰ࠾༻͞Ε͍ͯΔʢBQBDIFͰ3)&-͔ΒσϑΥϧτʹʣ ΫϥΠΞϯτ͔ΒͷϦΫΤετΛΠϕϯτͱͯ͠ѻ͍
ͦΕΛτϦΨʔʹϓϩηεͰϋϯυϦϯά͢Δ ΠϕϯτϧʔϓʹΑΔඇಉظͳΠϕϯτۦಈͱ*0ଟॏԽʹΑΔϦΫΤετͷฒߦॲཧ $Lʹରॲ ίϯςΩετεΠονൃੜ͠ͳ͍ʢγϯάϧεϨουʣ γϯάϧεϨου͕ނʹϝϞϦϦʔΫΛىͨ͜͠߹ʹ શϦΫΤετ͕ר͖ఴ͑ʹͳͬͯ͠·͏ϦεΫͷ͜ͱΛݴ͍ͬͯΔ
ͪͳΈʹ1ZUIPOͰʁ case Python: 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 22 GIL(Global Interpreter Lock)
ෳͷεϨου͕ಉ࣌ʹϝϞϦʹΞΫηε͢Δ͜ͱ͕ͳ͍Α͏ʹɺෳͷεϨουͰ 1ZUIPOΠϯλʔϓϦλʔΛಉ࣌ʹ࣮ߦ͢Δ͜ͱΛ͙ͨΊͷͷ 1ZUIPOϓϩάϥϜෳͷεϨουΛ࡞Ͱ͖ΔͷͷɺҰʹ࣮ࡍͷ1ZUIPO ίʔυΛ࣮ߦͰ͖ΔͷͭͷεϨου͚ͩ ͨͩɺྲྀੴʹϚϧνίΞ$16Λ׆༻Ͱ͖ͳ͍ͷ·͍ͣͷͰ ࠷৽ͷ1ZUIPOͰGSFFUISFBEJOHͱ͍͏ػೳʹΑͬͯ(*-Λ ΦϓγϣϯͰແޮԽͰ͖ΔΑ͏ʹͳ͍ͬͯΔʢ·ͩ৮Ε͍ͯͳ͍ʣ
༨ஊ Digression 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 23 ಡ*5༻ޠ࢛ఱԦɺ͋ͱҰਓʁ ɾnginx ɾJWT ɾWSGI
1ZUIPOͰ 8FCΞϓϦέʔγϣϯΛ ࡞ͬͯΈΔͧʂ Python Web Application 2025.5.31 24 1ZUIPOͰ8FCΞϓϦΛ࡞Δ
1ZUIPO8FCϑϨʔϜϫʔΫҰཡ Web Application Framework ೝূػߏɺ03.ɺ944ɺ42-JͷରࡦػߏͳͲΛඪ४Ͱࡌ͍ͯ͠ΔॾʑίϛίϛศརϑϨʔϜϫʔΫ *OTUBHSBN 1JOUFSFTU 'JSFGPYͷ։ൃʹ༻͍ΒΕ͍ͯΔ 2025.5.31 Django
5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 25 ඞཁ࠷খݶͷػೳͷΈΛඋ͑ͨίϯύΫτͳϑϨʔϜϫʔΫ ֶशίετ͕͍ Flask ͱΓ͋͑ͣ͘ɺόοΫΤϯυ։ൃʹ͓͍ͯσϑΝΫτελϯμʔυײ͕͋Δ σϑΥϧτͰ"1*υΩϡϝϯτΛੜͯ͘͠ΕΔ FastAPI
ྫ͑ʜ For example 2025.5.31 FastAPI 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 26 GPSFDBTUBUUFOEBODF ͱ͍͏"1*ͷఆٛ
͜Ε8FCͷߏͷͲ͜ʹ͋ͨΔʁ Kore ha Web no kousei no uchi doko ni
ataru? 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 27 Web Server Browser HTTP HTML ಈతίϯςϯπΛ৴͢Δ߹ Application Server HTTP HTML DB WebSocket Frame WebSocket Frame
͜Ε8FCͷߏͷͲ͜ʹ͋ͨΔʁ Kore ha Web no kousei no uchi doko ni
ataru? 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 28 Web Server Browser HTTP HTML ಈతίϯςϯπΛ৴͢Δ߹ Application Server HTTP HTML DB WebSocket Frame WebSocket Frame
'BTU"1*͚ͩͰ)551Λѻ͑ͳ͍ FastAPI cannot handle HTTP 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 29 6WJDPSOͱ͍͏ϥΠϒϥϦΛͬͯݺͿඞཁ͕͋Δ
6WJDPSOͱʁ What is Uvicorn? 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 30 "4(*ͱ͍͏8FCඪ४ʹ४ڌͨ͠8FCαʔόͷ࣮ ɾ"4(*
ඇಉظରԠͷ1ZUIPO8FCαʔόͱ8FCΞϓϦέʔγϣϯؒͷ ൚༻తͳΠϯλʔϑΣʔε 84(*ͷޙܧͱͯ͠࡞ΒΕͨ දతͳ࣮ͱͯ͠Uvicorn, NGINX Unit, HypercornͳͲ͕͋Δ ɾ84(* 1ZUIPO8FCαʔόͱ8FCΞϓϦέʔγϣϯؒͷ ൚༻తͳΠϯλʔϑΣʔε දతͳ࣮ͱͯ͠Gunicorn, uWSGIͳͲ͕͋Δ
1ZUIPO8FCϑϨʔϜϫʔΫͷରԠඪ४ Web Application Framework and Interface mapping 84(* "4(*ʢ࠷ۙରԠͨ͠ʣ 2025.5.31
Django 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 31 84(* Flask "4(* FastAPI
6WJDPSOͷཪଆ Uvicorn backyard 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 32 ࣮6WJDPSOγϯάϧϓϩηεͰ͔͠ಈ͔ͳ͍ ͦͷͨΊɺૉʹσϓϩΠ͢ΔͱϚϧνίΞͷϚγϯϦιʔεΛेશʹ׆͔͖͠Εͳ͍
ϚϧνίΞΛ׆͔͢ߏ Make use of Multiple CPU core 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ
33 ϚϧνίΞΛ׆͔ͯ͠ฒྻॲཧΛ༻͍ͯϦΫΤετΛࡹ͖͍ͨ߹ʁ (VOJDPSO ϚϧνϓϩηεͰ͍͚ΔͷͰɺ(VOJDPSO ͷϫʔΧʔϓϩηεͱͯ͠ 6WJDPSOΛ༻͍Δߏ͕Αͦ͞͏ʢ'BTU"1*͕ਪ͍ͯ͠Δʣ ͪͳΈʹ(VOJDPSO/HJOYͳͲͷQSPYZTFSWFSͷཪͰಈ͔͢͜ͱΛਪ͍ͯ͠Δ ͷͰɺ/HJOY(VOJDPSO6WJDPSOͱ͍͏ߏ͕ຊ൪ڥͱͯ͠Αͦ͞͏
ͻΉΒ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Α͖1ZUIPOϥΠϑΛʂ 2025.5.31 34