рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЛ рдлреНрд▓реЛрд░рд┐рдордВрдб рдорд╛рдирдХрд╛ рджреНрд╡рд╛рд░рд╛ " рдПрдПрд╕рдЬреАрдЖрдИ рдХрд╛ рдкрд░рд┐рдЪрдп: рдПрдХ рдПрдПрд╕рд┐рдВрдХреНрд╕ рдкрд╛рдпрдерди рд╡реЗрдм рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХрд╛ рдЙрджреНрднрд╡" рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

"рддрд╛рд▓рд╛рдм рдХреЗ рдкрд╛рд╕ рдХрдЫреБрдП," unsplash.com рдкрд░ рд░рд┐рдХрд╛рд░реНрдб рдмрд╛рд░рд╛рд╣рдо
рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рдкрд╛рдпрдерди рд╡реЗрдм рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдиреЗ рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдирдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдбрд╝ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕реА рдХреА рд╣реИ!
рдкрд╛рдпрдерди рд╡реЗрдм рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдирд╛рдПрдВ рд╣реЛ рд░рд╣реА рд╣реИрдВред рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдореБрдЦреНрдп рдЪрд╛рд▓рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ ASGI рд╣реИ - рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдорд╛рдирдХ рдЧреЗрдЯрд╡реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ASGI рдХрд╛ рдХрдИ рдмрд╛рд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬрдм рдореИрдВрдиреЗ рдмреЛрдХрд╛рдбрд┐рд▓реЛ ( рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкрд╛рдпрдерди рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ - рд▓рдЧрднрдЧред ) рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдФрд░ tartiflette-starlette ( ASGI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ HTTP рдХреЗ рд▓рд┐рдП GraphQLO рдПрдкреАрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп - рд▓рдЧрднрдЧред ред ), рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрднреА рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рд▓рд┐рдЦрд╛ред рдЕрдм рдореИрдВ рдХрд░реВрдВрдЧрд╛ред
рдпрд╣ рд▓реЗрдЦ рдкрд╛рдпрдерди рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдирд╡реАрдирддрдо рд░реБрдЭрд╛рдиреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рджреМрд░реЗ рдкрд░ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдПрд╕рдЬреАрдЖрдИ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдкрд╛рдпрдерди рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рднрдпрд╛рдирдХ-рдЕрд╕рдЧреА рдмрдирд╛рдпрд╛ рд╣реИ, рдЬреЛ рдХрднреА-рдлреИрд▓рддреЗ рдПрдПрд╕рдЬреАрдЖрдИ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд╕реВрдЪреА рд╣реИред
рдпрд╣ рд╕рдм async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ
рдЕрдкрдиреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдордп, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдЧреЛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкрд╛рдпрдерди рдиреЗ рдХреЛрдб рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХреАред рд▓рдВрдмреЗ рд╕рдордп рддрдХ, рдкрд╛рдпрдерди рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗрд╡рд▓ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдпрд╛ рдорд▓реНрдЯреА-рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдорджрдж рд╕реЗ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдиреЗрдЯрд╡рд░реНрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐ рдИрд╡реЗрдВрдЯрд▓реЗрдЯ, рдЬреЗрдВрдЯреЗрди рдпрд╛ рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (2008 рдореЗрдВ рд╡рд╛рдкрд╕, рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рдХреЗ рдкрд╛рд╕ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ coroutines рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, inlineCallbacks
рдФрд░ deferredGenerator
)
рдкрд╛рдпрдерди 3.4+ рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдкрд╛рдпрдерди 3.4 рдореЗрдВ, рдПрд╕рд┐рдВрдХреЛ рдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЬрдирд░реЗрдЯрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣рдХрд╛рд░реА рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ yield from
ред
рдмрд╛рдж рдореЗрдВ рдкрд╛рдпрдерди 3.5 рдореЗрдВ , async/await
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рджреЗрд╢реА рдХреЛрд░рд╛рдЙрдЯрд╛рдЗрди рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдереЗ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкрд╛рдпрдерди рдореЗрдВ рд╕реБрдЧрдорддрд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реЛрдиреЗ рдХреА рднреАрдбрд╝ рдереАред
рдкрд╛рдЧрд▓ рджреМрдбрд╝ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ! рд╕рдВрд╕реНрдХрд░рдг 3.5 рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рдж рд╕реЗ, рд╕рдореБрджрд╛рдп рдиреЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рдм рдХреБрдЫ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдИ рдкрд░рд┐рдгрд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдПрдЖрдИрдУ-рд▓рд┐рдмрд╛рд╕ рдФрд░ рднрдпрд╛рдирдХ-рдПрд╕рд┐рдВрдХреЛ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдФрд░ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рд╢рд╛рдВрдд рд▓реЛрдЧ рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ! ( рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Django ) ( Habr: Django 3.0 , рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдЧрд╛ , рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 12/02/2019 рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд▓рдЧрднрдЧред )
ASGI рдХреА рд╕рдореАрдХреНрд╖рд╛
рддреЛ рдПрдПрд╕рдЬреАрдЖрдИ рдЗрд╕ рд╕рдм рдореЗрдВ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ?
рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдПрдПрд╕рдЬреАрдЖрдИ рдХреЛ рдПрдХ рдРрд╕реА рдХрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрд╛рдпрдерди рд╕рд░реНрд╡рд░ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣ WSGI рд╕реЗ рдХрдИ рд╡рд╛рд╕реНрддреБ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрд░реЗрдЦ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдмрд╣реБрдд рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рдПрдПрд╕рдЬреАрдЖрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдПрд╕рдЬреАрдЖрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рдПрдПрд╕рдЬреАрдЖрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
ASGI рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:
- рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рд░реНрд╡рд░ - рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдИрд╡реЗрдВрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди ( рдПрдкреНрд▓рд┐рдХреЗрд╢рди ), рдЬреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдВрджрд░ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдШрдЯрдирд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рд╣реЛрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдПрд╕рдЬреАрдЖрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рд░реВрдк рд╣реИ рдФрд░ рдЗрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдЖрд░реЗрдЦ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдХрдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╡рд░рдг рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк HTTP рдФрд░ WebSocket рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕рд░реНрд╡рд░ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, ASGI рдХрдИ рдФрд░ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЗрд╕реЗ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ ...
ASGI рдореВрд▓ рдмрд╛рддреЗрдВ
рдЕрдм рдЬрдм рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ ASGI рдкрд╛рдпрдерди рд╡реЗрдм рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред
ASGI рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдбрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рдЬрдм рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рднреА рдбреЗрдЯрд╛ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдерд╛, рдЕрд░реНрдерд╛рддред рдРрд╕рд╛ рдХреБрдЫ рдЬреЛ рдХреБрдЫ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдПрдПрд╕рдЬреАрдЖрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рд╕рднреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп (рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ, рдлрд┐рд░ рд╕реЗ, рдПрдПрд╕рдЬреАрдЖрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ :
async def app(scope, receive, send): ...
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ "рдПрдПрд╕рдЬреАрдЖрдИ" рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ "рдЖрдИ" рдХрд╛ рдЕрд░реНрде рд╣реИ: рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:
scope
рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА HTTP рдФрд░ WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИред- ASGI рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рд░реЛрд╣ рд╣реИред
- ASGI рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
send
рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдкрдХреЛ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдкрд░ рдкреНрд░рд╛рдкреНрдд ( receive()
рдФрд░) рдФрд░ рд╕рдВрдЪрд╛рд░рд┐рдд ( send()
) рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рд░реНрд╡рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдпрд╣ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЪреИрдирд▓ рдХрд┐рд╕ рд╕рдВрджрд░реНрдн (рдпрд╛ scope
) рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореИрдВ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдкрд╕рдВрдж рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдм рдПрдХ рдирдореВрдирд╛ рдХреЛрдб рджреЗрдЦреЗрдВред
рдХреЛрдб рджрд┐рдЦрд╛рдУ!
рдПрдПрд╕рдЬреАрдЖрдИ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирдВрдЧреЗ рдПрдПрд╕рдЬреАрдЖрдИ рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЬреЛ рдХрд┐ рдпреВрд╡реАрдХреЛрд░реНрди (рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдПрд╕рдЬреАрдЖрдИ рд╕рд░реНрд╡рд░) рджреНрд╡рд╛рд░рд╛ рдкрд░реЛрд╕рд╛ рдЧрдпрд╛ HTTP рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
async def app(scope, receive, send): assert scope["type"] == "http" await send({ "type": "http.response.start", "status": 200, "headers": [ [b"content-type", b"text/plain"], ] }) await send({ "type": "http.response.body", "body": b"Hello, world!", })
рд╕реНрд░реЛрдд рдХреЛрдб - https://glitch.com/edit/#//asgi-hello-world
рдпрд╣рд╛рдВ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП send()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдкрд╣рд▓реЗ рд╣рдо рд╣реЗрдбрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмреЙрдбреАред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрди рд╕рднреА рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдФрд░ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рдХрд╛рд░рдг, рдирдВрдЧреЗ рдПрдПрд╕рдЬреАрдЖрдИ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдФрд░ рдЬрдм рдореИрдВ рд╕реНрдЯрд╛рд░рд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред
рд╕реНрдЯрд╛рд░рд▓реЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдПрд╕рдЬреАрдЖрдИ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХрд╛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдЙрддреНрддрд░реЛрдВ рдЬреИрд╕реЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк ASGI рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ, Starlette рдореЗрдВ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рд╕реНрдЯрд╛рд░реНрд▓реЗрдЯ рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ - рд░реВрдЯрд┐рдВрдЧ, рдорд┐рдбрд▓рд╡реЗрдпрд░, рдЖрджрд┐ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрдПрд╕рдЬреАрдЖрдИ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рдХреНрддрд┐ рдкрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЫреАрди-рдЫреАрди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рд╣реИ ...
рд╕рднреА рддрд░рд╣ рд╕реЗ рдХрдЫреБрдП
ASGI рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдирд┐рдпрдо рдмрджрд▓рдиреЗ рд╡рд╛рд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЯрд░реНрдЯрд▓ рдСрд▓ рдж рд╡реЗ , рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреА рдЧрдИ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?) рдПрдВрдбреНрд░рдпреВ рдЧреЙрдбрд╡рд┐рди рджреНрд╡рд╛рд░рд╛, рдЬрд┐рд╕рдиреЗ Django рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рдпрд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Django рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рдЪреВрдВрдХрд┐ ASGI рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐ ASGI рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдЯреИрдХ рдореЗрдВ рдХрд╣реАрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯрд╛рд░рд▓реЗрдЯ Response
рдСрдмреНрдЬреЗрдХреНрдЯ ASGI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдХрд┐рддрдирд╛ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧ рд░рд╣рд╛ рд╣реИ?
рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП, рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред
тАЬрд╕рднреА рддрд░рд╣ рдХреЗ рдХрдЫреБрдУрдВтАЭ рдХрд╛ рдЧрд╣рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдорд┐рдбрд▓рд╡реЗрдпрд░, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рддрдм рддрдХ рд╕рдВрдЧрдд рд╣реИрдВ рдЬрдм рддрдХ рд╡реЗ рд╕рднреА ASGI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреЛрдХрд╛рдбрд┐рд▓реЛ рд╕реЗ , рдПрдПрд╕рдЬреАрдЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрд╣реБрдд рдмрд╛рд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ (рдпрджрд┐ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ) рдмрд╣реБрдд рдХреНрд▓реАрдирд░ рдХреЛрдб рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ ASGI рдорд┐рдбрд▓рд╡реЗрдпрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛рдиреА рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ) рдЬреЛ рд╕рдордп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ ...
... рдФрд░ рдпрд╣ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
$ uvicorn app:app INFO: Started server process [59405] INFO: Waiting for application startup. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ... INFO: ('127.0.0.1', 62718) - "GET / HTTP/1.1" 200 Took 1.00 seconds
рдпрд╣ TimingMiddleware
рдХрд┐ TimingMiddleware
рдЖрдк рдХрд┐рд╕реА рднреА ASGI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрдкрд░-рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ (рд╕реИрдХрдбрд╝реЛрдВ рдПрдкреАрдЖрдИ рдФрд░ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ) - рдпрд╣ рддрдм рддрдХ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдПрд╕рдЬреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рди рд╣реЛред
(рдЗрд╕ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдФрджреНрдпреЛрдЧрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддреИрдпрд╛рд░ рд╣реИ: рдЯрд╛рдЗрдорд┐рдВрдЧ-рдПрд╕рдЧреА ред)
рдХреНрдпреЛрдВ рдкрд░реЗрд╢рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЬрдмрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЧрддрддрд╛ рдмрд╣реБрдд рдордЬрдмреВрдд рддрд░реНрдХ рд╣реИ, рдкрд╛рдпрдерди рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЬреАрдЖрдИ-рдЖрдзрд╛рд░рд┐рдд рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдФрд░ рдлрд╛рдпрджреЗ рд╣реИрдВред
- рдЧрддрд┐: рдПрдПрд╕рдЬреАрдЖрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рдХреГрддрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬ (рдХрдо рд╕реЗ рдХрдо рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП) рдмрдирд╛рддреА рд╣реИ - рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 60k-70k рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдлреНрд▓рд╛рд╕реНрдХ рдФрд░ Django рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ 10-20k рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ)ред
- рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: ASGI рд╕рд░реНрд╡рд░ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЖрдкрдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ (WebSocket, Server-Sent Events, HTTP / 2) рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХреЛрдб рдФрд░ WSGI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╕реНрдерд┐рд░рддрд╛: рдПрдПрд╕рдЬреАрдЖрдИ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрднрдЧ 3 рд╕рд╛рд▓ рд╕реЗ рд╣реИ, рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 3.0 рдХреЛ рдмрд╣реБрдд рд╕реНрдерд┐рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рд╕реНрдерд┐рд░ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдФрдЬрд╛рд░реЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдпрд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрд░ рдкрд░ рдкрд╣реБрдБрдЪ рдЧрдП рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЙрдЪреНрдЪ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдПрд╕рдЬреАрдЖрдИ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдмрд╣реБрдд рдЬрд▓реНрдж рд╣реА рдкрд╛рд░рдВрдкрд░рд┐рдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ / рдбрдмреНрд▓реНрдпреВрдПрд╕рдЬреАрдЖрдИ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ ASGI рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдШрдЯрдХ рдХрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ рдПрдПрд╕рдЬреАрдЖрдИ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕реБрдзрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпреЗ рд╕рд░реНрд╡рд░ рдФрд░ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рд╕реЗрдЯ рдЬреИрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рдЙрддреНрдкрд╛рдж-рдЙрдиреНрдореБрдЦ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднреА рд╣реИрдВред
рдиреАрдЪреЗ рдЧреИрд░-рд╡реЗрдм-рдЖрдзрд╛рд░рд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдореЗрд░реА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрдард┐рди рдерд╛ред
рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрдорд╛рд▓ рдХрд╛ рдЕрд╕рдЧ рдмрдирд╛рдпрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдХреЛ рдПрдПрд╕рдЬреАрдЖрдИ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдЪреАрдЬреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред (рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡рд╣ рд▓рдЧрднрдЧ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ 100 рд╕рд┐рддрд╛рд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЬрдЧрд╣ рдПрдПрд╕рдЬреАрдЖрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред)
рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдПрдПрд╕рдЬреАрдЖрдИ рдиреЗ рдкрд╛рдпрдерди рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдирдП рдпреБрдЧ рдХреА рдиреАрдВрд╡ рд░рдЦреА рд╣реИред
рдпрджрд┐ рдЖрдк ASGI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ awesome-asgi
рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд╢рдиреЛрдВ (рд▓реЗрдЦреЛрдВ рдФрд░ рднрд╛рд╖рдгреЛрдВ) рдХреЛ awesome-asgi
ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЫреВрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБ:
рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрдирдХреЛрдбреЗ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЯреЙрдо рдХреНрд░рд┐рд╕реНрдЯреА рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдПрдирдХреЛрдб рд╕рдкреЛрд░реНрдЯ рдЯреАрдо рдмрдирд╛рдиреЗ рдкрд░ рдЦреБрд▓реА рдЪрд░реНрдЪрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдУрдкрди-рд╕реЛрд░реНрд╕ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдереЗ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рд╣реИ!
рдордЬрд╝рд╛ рдЖ рдЧрдпрд╛ ASGI рджреБрдирд┐рдпрд╛ рдХреА рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП!