рдмрд╡рдВрдбрд░ рдмрдирд╛рдо Aiohttp: рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЪреМрдЦрдЯреЗ рдХреЗ wilds рдореЗрдВ рдПрдХ рдпрд╛рддреНрд░рд╛

рдирдорд╕реНрддреЗ! рдореИрдВ рдбрд┐рдорд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╕рдордп рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдмреИрдард╛ рд╣реВрдВред рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рджреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЯреЙрд░рдиреЗрдбреЛ рдФрд░ рдПрдпреЛрд╣реЗрдЯреНрдкред рдореИрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЪреМрдЦрдЯреЗ рдХреЗ рдмреАрдЪ рдХреА рдкрд╕рдВрдж рдХреА рдХрд╣рд╛рдиреА рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЯреЙрд░рдиреЗрдбреЛ рдФрд░ рдПрд╕рд┐рдВрдХреНрд╢рд┐рдпреЛ рдореЗрдВ рдХреЙрд░рдЯрд╛рдЗрдиреНрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдореИрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╡рд┐рдХрд▓реЛрдВ рдореЗрдВ рдЖрдиреЗ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрд╕ рджреВрдВрдЧрд╛ред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрд╡рд┐рдЯреЛ рдПрдХ рдХрд╛рдлреА рдмрдбрд╝реА рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕реЗрд╡рд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдФрд░ рд▓реЛрдб рд╣реИ, рд╣рд░ рдорд╣реАрдиреЗ 35 рдорд┐рд▓рд┐рдпрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рджреИрдирд┐рдХ 45 рдорд┐рд▓рд┐рдпрди рд╕рдХреНрд░рд┐рдп рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╣реИрдВред рдореИрдВ рдПрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╡рд┐рдХрд╛рд╕ рд╕рдореВрд╣ рдХреЗ рддрдХрдиреАрдХреА рд╕рд▓рд╛рд╣рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реА рдЯреАрдо рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд▓рд┐рдЦрддреА рд╣реИ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рдмреАрд╕ рд╣реИрдВред рдПрдХ рд▓реЛрдб рдЗрд╕ рд╕рдм рдкрд░ рдЬрдорд╛ рд╣реИ - рдЬреИрд╕реЗ 5k рдЖрд░рдкреАрдПрд╕ред

рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЪреБрдирдирд╛


рдкрд╣рд▓реЗ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЕрдм рдХрд╣рд╛рдБ рд╣реИрдВ, рд╣рдо рдХреИрд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реБрдПред 2015 рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдврд╛рдВрдЪреЗ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рдереЗ:

  • рдХрд┐ рдЖрдк рдЕрдиреНрдп microservices рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛: http, json, rpc;
  • рдЖрдкрдХреЛ рд╣рд░ рд╕рдордп рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: Redis, Postgres, MongoDBред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдХрдмреНрдЬрд╛ рд╣реИред рдЙрд╕ рд╕рдордп рдЕрдЬрдЧрд░ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг 3.4 рдерд╛, async рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдЕрднреА рддрдХ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред Aiohttp рднреА рдерд╛ - рд╕рдВрд╕реНрдХрд░рдг 0.x рдореЗрдВред рдлреЗрд╕рдмреБрдХ рдХрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЯреЙрд░рдиреЗрдбреЛ 2010 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╡рдВрдбрд░ рдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░ рд╕реНрдерд┐рд░ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдПред рдлрд┐рд░ рд╣рдордиреЗ рдЗрд╕ рдврд╛рдВрдЪреЗ рдкрд░ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ред

рддреАрди рд╕рд╛рд▓ рдмрд╛рдж, рд╣рдордиреЗ рдмрд╣реБрдд рдХреБрдЫ рд╕рдордЭрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд╛рдпрдерди 3.5 async / рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдЖрдпрд╛ред рд╣рдордиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдЙрдкрдЬ рдФрд░ рдЙрдкрдЬ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЯреЙрд░рдиреЗрдбреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХреИрд╕реЗ рд╣реИ (рд╕реНрдкреЙрдЗрд▓рд░: рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ)ред
рджреВрд╕рд░реЗ, рд╣рдо рд╢реЗрдбреНрдпреВрд▓рд░ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд╕рд╛рде рдЕрдЬреАрдм рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рд╕реАрдкреАрдпреВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рддреАрд╕рд░рд╛, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЕрдиреНрдп рдЯреЛрд░рдиреЗрдбреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ http рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдбреАрдПрдирдПрд╕ рд░рд┐рд╕реЛрд▓реНрд╡рд░ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╡рдВрдбрд░ рдореЗрдВ http рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХрд░реНрд▓ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЕрдЬреАрдм рд╣реИред

рдкрд╛рдЗрдХреЙрди рд░реВрд╕ 2018 рдореЗрдВ рдЕрдкрдиреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рдЖрдВрджреНрд░реЗрдИ рд╢реНрд╡реЗрддрд▓реЛрд╡ рдиреЗ рдХрд╣рд╛: "рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╕рд┐рд░реНрдл рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓рд┐рдЦреЗрдВ, рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдЗрд╡реЗрдВрдЯ рд▓реВрдк, рд╢рд╛рдпрдж, рдЖрдкрдХреЛ рдЬрд▓реНрдж рд╣реА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЪреМрдЦрдЯреЛрдВ рдХреЗ рдЪрдХреНрдХрд░ рдореЗрдВ рди рдкрдбрд╝реЗрдВ рддрд╛рдХрд┐ рднреНрд░рдорд┐рдд рди рд╣реЛрдВред рдирд┐рдореНрди-рд╕реНрддрд░ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдФрд░ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ ... "ред рдкрд┐рдЫрд▓реЗ рддреАрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рд╣рдо, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрд╣реБрдд рдмрд╛рд░ рдЯреЙрд░рдиреЗрдбреЛ рдХреЗ рдЕрдВрджрд░ рдЪрдврд╝ рдЧрдП, рд╡рд╣рд╛рдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╕реАрдЦреАрдВ рдФрд░ 30-40 рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд╛рд▓ рдЯреНрд░реЗрд╕рдмреИрдХ рджреЗрдЦреЗред

рд╕реЗ рдЙрдкрдЬ рдмрдирд╛рдо рдЙрдкрдЬ


рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдЬрдЧрд░ рдореЗрдВ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдЙрдкрдЬ рдФрд░ рдЙрдкрдЬ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИред

Guido Van Rossum рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд▓рд┐рдЦрд╛ рд╣реИ ред рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдХреЛ рдереЛрдбрд╝реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореБрдЭреЗ рдХрдИ рдмрд╛рд░ рдкреВрдЫрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреАрдИрдкреА 3156 рдкреИрджрд╛рд╡рд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд╛рдпрдерди 3.2 рдпрд╛ 2.7 рдореЗрдВ рдмреИрдХрдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рддрд╛ рд╣реИред
(...)
рдЬрдм рднреА рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд╣рд┐рдП, рдЖрдк рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдЬ рдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ) рдПрдХ рдЬрдирд░реЗрдЯрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓реЛ рдЙрд╕реЗ рдПрдХ рдпреЛрдЬрдирд╛рдХрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдиреБрд╕реВрдЪрдХ рд╢рд╛рд╕реНрддреНрд░реАрдп рдЕрд░реНрде рдореЗрдВ "forerate" рдирд╣реАрдВ рдХрд░рддрд╛ (рд▓реВрдк рдХреЗ рд▓рд┐рдП); рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рджреЛ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ "рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп" рдЕрдиреБрдХреНрд░рдо рдХрд╣реВрдВрдЧрд╛ред рдпрд╣ рднрд╡рд┐рд╖реНрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реВрдЪреА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрд╕реВрдЪрдХ рдПрдХ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрджрдо рдЙрдард╛рддрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг рднрд╡рд┐рд╖реНрдп рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде .send () рдЬрдирд░реЗрдЯрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рд╕реЙрдХреЗрдЯ рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ); рдЬрдирд░реЗрдЯрд░ рдореЗрдВ, рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдЙрдкрдЬ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рднреЗрдЬреЗрдВ () рдПрдХ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрд╛ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ (рдЬреЛ рд╕реНрдЯреЙрдкрдЗрдЯрд░реЗрд╢рди, рдПрдХ рдЕрдиреНрдп рдЕрдкрд╡рд╛рдж рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред
(рдпрджрд┐ рдЖрдк рднреНрд░рдорд┐рдд рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рдЬрдирд░реЗрдЯрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ .send () рд╡рд┐рдзрд┐ред рд╢рд╛рдпрдж PEP 342 рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИ)ред

(...)

рд╢реЗрдбреНрдпреВрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рджреВрд╕рд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЕрднреА рднреА I / O рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдХрд┐рд╕реА рддрд░рд╣ рдЪреБрдирд┐рдВрджрд╛ / рдкреЛрд▓ / рд╢реЗрд▓ рдЖрджрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ I / O рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рддреЛ рдХреЙрд▓рдмреИрдХ рджреЗрддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП I / O рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдореА рднрд╡рд┐рд╖реНрдп рдХреЗ рдореВрд▓реНрдп I / O рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХрддрд╛рд░ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

(...)

рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддрдХ рдкрд╣реБрдВрдЪ рдЧрдП рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдВрджрд░, рдЖрдк рд░реАрд╡ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЙрдХреЗрдЯ рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рддреЗ рд╣реИрдВред рдпреЗ рдмрд╛рдЗрдЯреНрд╕ рдмрдлрд╝рд░ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддреЗ рд╣реИрдВред рдЖрд░рдИрд╡реАрд╡реА () рдкрджреНрдзрддрд┐ рдХреЛ рдПрдХ рдПрд╕рд┐рдВрдХреНрд╢ рд╢реЗрд▓ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ I / O рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ I / O рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛ред рдЕрдм рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдХреЛрдИ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдмрдлрд░ рд▓рд╛рдЗрди рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдиреЗ рд░реАрдбрд▓рд╛рдЗрди () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдмрдлрд╝рд░ рдХрд╛ рдЖрдХрд╛рд░ рдФрд╕рдд рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдЖрдкрдХреА рд░реАрдбрд▓рд╛рдЗрди () рд╡рд┐рдзрд┐ рдмрдлрд╝рд░ рд╕реЗ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдмрд┐рдирд╛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреА рд╣реИ; рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдмрдлрд░ рдореЗрдВ рдПрдХ рдкреВрд░реА рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕реЙрдХреЗрдЯ рдкрд░ рд░реАрдбрд▓рд╛рдЗрди () рдмрджрд▓реЗ рдореЗрдВ рдХреЙрд▓ (рдЖрд░рдИрд╡реА) рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред

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

(...)

рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдХрдИ рднрд╡рд┐рд╖реНрдп рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП I / O рдЕрд╡рд░реЛрдзрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░реАрдбрд▓рд╛рдЗрди () рднрд╡рд┐рд╖реНрдп рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЙрдкрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред
рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЙрд░рдЯреАрди рдкрд░ рд╕реАрдзреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рднрд╡рд┐рд╖реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХрддрд╛рд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛ (рдмрд╢рд░реНрддреЗ рдХрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрд░рдЯрд╛рдЗрди рд╣реИ), рдЪреВрдВрдХрд┐ рдХрддрд╛рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рди рдХреЗрд╡рд▓ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдореГрддрд┐ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрддрд╛ (рдпрджрд┐ рдпрд╣ рд╕рднреА рдореЗрдВ рдореМрдЬреВрдж рд╣реИ) рднреА рд╢рд╛рдпрдж рдЦреЛ рдЧрдпрд╛ рд╣реИред

(...)

рдЗрд╕ рд╕рдм рдХрд╛ рд╢реБрджреНрдз рдкреНрд░рднрд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд░рдЯрд╛рдЗрди рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдЙрдкрдЬ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдХреЛрд░рдЯрд╛рдЗрди рдореЗрдВ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдордиреЛрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЕрд╡рд░реЛрдз рд╣реИ - рдореМрдЬреВрджрд╛ рдкреНрд░рддрд┐рд░реЛрдз рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдордЬрдмреВрдд, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рддрдЪреАрдд рд╕реЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЧрддрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдЕрдм рдЗрд╕реЗ рдЙрдкрдЬ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред

(...)

рдЖрдкрдиреЗ рд╕реБрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ "рдПрд╕ рд╕реЗ рдЙрдкрдЬ" рд▓рдЧрднрдЧ "рдПрд╕ рдореЗрдВ рдореИрдВ рдХреЗ рд▓рд┐рдП: рдЙрдкрдЬ рдореИрдВ" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрд░рдЯрд╛рдЗрди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдЕрднреА рддрдХ I / O рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рд╕реЛрдЪреЛ):

def driver(g): print(next(g)) g.send(42) def gen1(): val = yield 'okay' print(val) driver(gen1()) 

рдпрд╣ рдХреЛрдб "рдУрдХреЗ" рдФрд░ "42" рд╡рд╛рд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдлрд┐рд░ рдПрдХ рдмрд┐рдирд╛ рд░реБрдХреЗ рд╕реНрдЯреЙрдкрдЗрдВрдЯрд░реЗрд╢рди рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдЬреАрди 1 рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрдкрдЬ рдЬреЛрдбрд╝рдХрд░ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдВрдХ рдкрд░ pythontutor.com рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 def gen2(): yield from gen1() driver(gen2()) 

рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╕реЛрдЪрд┐рдпреЗред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдлреЙрд░-рд▓реВрдк рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдЬ-рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдб рдХреЛрдИ рднреА рдирд╣реАрдВ рд▓реМрдЯреЗрдЧрд╛ред (рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░реЛ) ред рдпреАрд▓реНрдб-рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдЬреАрди 1 рдХреЗ рдмреАрдЪ "рдкрд╛рд░рджрд░реНрд╢реА рдЪреИрдирд▓" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЬрдм рдЬреАрди 1 рдорд╛рди рджреЗрддрд╛ рд╣реИ "рдареАрдХ рд╣реИ", рдпрд╣ рдЬреАрди 2 рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдЙрдкрдЬ-рд╕реЗ, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ, рдФрд░ рдЬрдм рдбреНрд░рд╛рдЗрд╡рд░ 42 рдХреЛ рд╡рд╛рдкрд╕ рдЬреАрди 2 рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рдЙрдкрдЬ рд╕реЗ рд╡рд╛рдкрд╕-рд╕реЗ рд╡рд╛рдкрд╕ рдЬреАрди 1 рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдЬ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдмрди рдЬрд╛рддрд╛ рд╣реИ) )ред

рдпрджрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ рддреЛ рдпрд╣реА рдмрд╛рдд рд╣реЛрдЧреА: рддреНрд░реБрдЯрд┐ рдЙрдкрдЬ рд╕реЗ-рдЙрд╕ рдЖрдВрддрд░рд┐рдХ рдЬрдирд░реЗрдЯрд░ рддрдХ рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 def throwing_driver(g): print(next(g)) g.throw(RuntimeError('booh')) def gen1(): try: val = yield 'okay' except RuntimeError as exc: print(exc) else: print(val) yield throwing_driver(gen1()) 

рдХреЛрдб "рдареАрдХ" рдФрд░ "рдмрд╛рд╣" рджреЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб:

 def gen2(): yield from gen1() # unchanged throwing_driver(gen2()) 

(рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: goo.gl/8tnjk )

рдЕрдм рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ (рдПрдПрд╕рд╕реАрдЖрдИрдЖрдИ) рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВ [f1 -> f2 -> ... -> fN) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реАрд░реНрд╖ рдкрд░ f1 (рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЙрд▓ рдлреНрд░реЗрдо) рдФрд░ fN рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ (рд╕рдмрд╕реЗ рдирдпрд╛ рдХреЙрд▓ рдлреНрд░реЗрдо), рдЬрд╣рд╛рдВ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдПрдХ рдЬрдирд░реЗрдЯрд░ рд╣реИ, рдФрд░ ->> рдЙрдкрдЬ-рд╕реЗ ред рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг, рдбреНрд░рд╛рдЗрд╡рд░ (gen1 ()) рдХреА рдЙрдкрдЬ-рд╕реЗ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдЬреАрди 1 рдЬрдирд░реЗрдЯрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 [ gen1 ) 

рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, gen2 рдЙрдкрдЬ рд╕реЗ рдЬреАрди 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 [ gen2 -> gen1 ) 

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

рдЕрдм рдореИрдВ рд░реАрдбрд▓рд╛рдЗрди () рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред рд╣рдо рд░реАрдбрд▓рд╛рдЗрди () рдХреЛ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд░реАрдб рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (), рдЙрдкрдЬ рд╕реЗ рдПрдХ рдФрд░ рдЬрдирд░реЗрдЯрд░; рдЙрддреНрддрд░рд╛рд░реНрджреНрдз, рдмрджрд▓реЗ рдореЗрдВ, рдХреЙрд▓ recv (), рдЬреЛ рд╕реЙрдХреЗрдЯ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдмрд╛рдИрдВ рдУрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЬрдирд░реЗрдЯрд░ рднреА рдорд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рд░реАрдбрд▓рд╛рдЗрди () рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 [ app -> readline -> read -> recv ) 

рдЕрдм рдЖрд░рдИрд╡реАрд╡реА () рдЬрдирд░реЗрдЯрд░ I / O рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрд╛рдВрдзрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ * рдЙрдкрдЬ * (рдЙрдкрдЬ-рдирд╣реАрдВ!) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рд╢реЗрдбреНрдпреВрд▓рд░ рдореЗрдВ рдЙрдкрдЬ-рджреЛрдиреЛрдВ рддреАрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдИрдВ рдУрд░ рдЬрд╛рддрд╛ рд╣реИ ("[" рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╣реИ)ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдПрдХ рдвреЗрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ; рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рдмрд╛рдпрд╛рдВ рдЬрдирд░реЗрдЯрд░ рд╣реИ рдФрд░ рдЙрд╕рдиреЗ рдЕрднреА-рдЕрднреА рднрд╡рд┐рд╖реНрдп рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИред рдЬрдм I / O рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИ; рдкрд░рд┐рдгрд╛рдо рджреЛрдиреЛрдВ рдпреЗрд▓реНрдб-рд╕реЗ рдПрд░реЛ рдХреЗ рд╕рд╛рде рджрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЖрд░рд╡реА рдЬрдирд░реЗрдЯрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕реЙрдХреЗрдЯ рд╕реЗ рдЙрдкрдЬ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреИрджрд╛рд╡рд╛рд░-рд╕реЗ-рдлреНрд░реЗрдорд╡рд░реНрдХ рд╢реЗрдбреНрдпреВрд▓рд░ I / O рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдпреАрд▓реНрдб-рдЖрдзрд╛рд░рд┐рдд рдлреНрд░реЗрдорд╡рд░реНрдХ рд╢реЗрдбреНрдпреВрд▓рд░ред * рд▓реЗрдХрд┐рди * * рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЙрд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢реЗрдбреНрдпреВрд▓рд░ рд░реАрдбрд▓рд╛рдЗрди () рдФрд░ рд░реАрдб () рдХреЗ рдмреАрдЪ рдпрд╛ рд░реАрдб () рдФрд░ рд░рд┐рдХрд╡ (), рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЗ рдмреАрдЪ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╢реЗрдбреНрдпреВрд▓рд░ рддрдм рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди () рдХреЙрд▓ рд░реАрдбрд▓рд╛рдЗрди (), рдФрд░ рд░реАрдбрд▓рд╛рдЗрди () рдХреЙрд▓ (рд░реАрдб рдХреЙрд▓рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛) рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - (рдРрдк рдФрд░) рдФрд░ рд░реАрдбрд▓рд╛рдЗрди () рдХреЗ рдмреАрдЪ рдХреА рдмрд╛рддрдЪреАрдд рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рдпрдЯреЗрдХреЛрдб рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИ рдЕрдЬрдЧрд░ред рд╢реЗрдбреНрдпреВрд▓рд░ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рднрд╡рд┐рд╖реНрдп рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднрд╡рд┐рд╖реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд╣рд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдФрд░ рдирд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рднрд╡рд┐рд╖реНрдп рдЬреЛ рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ I / O рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, recv () рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рддред

рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рддрдХ рдкрдврд╝ рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреБрд░рд╕реНрдХрд╛рд░ рдХреЗ рдкрд╛рддреНрд░ рд╣реИрдВред рдореИрдВрдиреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рдЪрд┐рддреНрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдмрд╛рдд рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред * рдЖрдк рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдЬ рд╕реЗ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкреИрджрд╛рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╣рд░ рд▓рд┐рдВрдХ рдХрд╛ рднрд╡рд┐рд╖реНрдп рд╣реЛ, рди рдХрд┐ рд╕рд┐рд░реНрдл рдХреЛрд░рдЯрд╛рдЗрдиред рдЪреВрдВрдХрд┐ рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдпрд╛рдж рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЙрдкрдЬ-рд╕реЗ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрдкрдЬ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рднреА рдкреБрдирд░рд╛рд╡рд░реНрддреА () рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП-рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ I / O рдХреЛ рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: __iter__ рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдореБрджреНрджрд╛ рд╣реИред

(...)

рдФрд░ рдПрдХ рдмрд╛рддред рдЙрдкрдЬ-рд╡рд╛рдкрд╕реА рд╕реЗ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реИ? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ * рдмрд╛рд╣рд░реА * рдЬрдирд░реЗрдЯрд░ рдХрд╛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╣реИред

(...)

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдмрдХрд┐ рддреАрд░ рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдлреНрд░реЗрдо рдХреЛ * рдЙрдкрдЬ * рд▓рдХреНрд╖реНрдп рдкрд░ рдмрд╛рдБрдзрддреЗ рд╣реИрдВ, рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рд░рд┐рдЯрд░реНрди рдорд╛рди рднреА рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдоред рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдмреЗрд╢рдХ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдкрд░, рдЙрдиреНрд╣реЗрдВ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ / рдЫреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдкреИрджрд╛рд╡рд╛рд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдмрд╣реБрдд рдЗрдВрддрдЬрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рд╣реИред

рдмрдирд╛рдо async рд╕реЗ рдЙрдкрдЬ


def рдХреЛрд░реЛ () ^

y = рд╕реЗ рдЙрдкрдЬ

async def async_coro ():

y = a рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ

0 load_global0 load_global
2 get_yield_from_iter

2 get_awaitable

4 load_const

4 load_const

6 рдЙрдкрдЬ_рдлреНрд░реЙрдо6 рдЙрдкрдЬ_рдлреНрд░реЙрдо
8 store_fast

8 store_fast

10 load_const10 load_const
12 рд░рд┐рдЯрд░реНрди_рд╡рд▓реНрдпреВ12 рд░рд┐рдЯрд░реНрди_рд╡рд▓реНрдпреВ


рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рд╕реНрдХреВрд▓реЛрдВ рдХреЗ рджреЛ рдХреЙрд░рдЖрдЙрдЯреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдорд╛рдореВрд▓реА рдЕрдВрддрд░ рд╣реИ - рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдЙрдкрдЬ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рд╣реИ? рдмрд╡рдВрдбрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 5 рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкреИрджрд╛рд╡рд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХреА рдЗрд╕ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ / рд╢рд╛рдВрдд рдкреНрд░рддрд┐рдорд╛рди рд╕реЗ рдирдП рд╢рд╛рдВрдд рдЙрдкрдЬ рдХреЗ рд╕рд╛рде рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд╕рдВрдЧрдд рд╣реИред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдврд╛рдВрдЪрд╛ рдвреВрдВрдврдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреЗрд╡рд▓ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдЪреБрдирдирд╛ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдореИрдВрдиреЗ Aiohttp рд╕рдВрд╕реНрдХрд░рдг 3.4.4, Tornado 5.1.1, uvloop 0.11 рд▓рд┐рдпрд╛, Intel Xeon рд╕рд░реНрд╡рд░ рдкреНрд░реЛрд╕реЗрд╕рд░, CPU E5 v4, 3.6 GHz рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕ рдкрд░ Python 3.6.5 рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рд╢реБрд░реВ рдХрд░ рджреАред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рд╣рдо рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд░реЛрд╡рд░реНрд╕ рдХреА рдорджрдж рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рдо рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ, рд╡рд╣рд╛рдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рдПрдХ рдФрд░ рджреЛ рдпрд╛ рддреАрди рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд░реНрд╕ рдкрд░ рдЬрд╛рдПрдВ, рд╕рд╛рде рд╣реА рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ, рдлрд┐рд░ рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд╣реАрдВ рд▓рд┐рдЦреЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВред рдпрд╣ рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рд╣рдо рдПрдХ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ 50 рдПрдордПрд╕ рд╕реЛрддреЗ рд╣реИрдВред рдПрдХ coroutine рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдкреВрд░рд╛ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЖрд░рдкреАрдПрд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд╡реИрд╕рд╛ рд╣реА рдПрдХ рдкрд░рд┐рдорд╛рдг рдХрд╛ рдХреНрд░рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕реНрд╡реАрдХрд╛рд░реНрдп рджреЗрд░реА рдХреЗ рд╕рд╛рде рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрд░рдЖрдЙрдЯ рдПрдХ рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдкрд┐рди рд╣реЛрдВрдЧреЗред

 @tornado.gen.coroutine def old_school_work(): yield tornado.gen.sleep(SLEEP_TIME) async def work(): await tornado.gen.sleep(SLEEP_TIME) 

рд▓реЛрдб - http рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЕрд╡рдзрд┐ - 300s, 1s - рд╡рд╛рд░реНрдордЕрдк, рд▓реЛрдб рдХреЗ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред



рд╕реЗрд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдкрд░ рдкрд░рд┐рдгрд╛рдоред

рдкреНрд░рддрд┐рд╢рдд рдХреНрдпрд╛ рд╣реИрдВ?
рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВред 95 рдкреНрд░рддрд┐рд╢рдд рдкреНрд░рддрд┐рд╢рдд X рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдирдореВрдиреЗ рдореЗрдВ 95% рдорд╛рди X рд╕реЗ рдХрдо рд╣реИрдВред 5% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреА рд╕рдВрдЦреНрдпрд╛ X рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧреАред

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрддрдиреЗ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдкрд░ Aiohttp рдиреЗ 1000 RPS рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рднреА рдЕрдм рддрдХ uvloop рдХреЗ рдмрд┐рдирд╛ред

рдЯреЙрд░рдиреЗрдбреЛ рдХреА рддреБрд▓рдирд╛ рдкреБрд░рд╛рдиреЗ (рдкреИрджрд╛рд╡рд╛рд░) рдФрд░ рдирдП (async) рд╕реНрдХреВрд▓реЛрдВ рдХреЗ рдХреЛрд░рдЖрдЙрдЯреНрд╕ рд╕реЗ рдХрд░реЗрдВред рд▓реЗрдЦрдХ рдЬреЛрд░ рд╕реЗ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИрдВред

1200 рдЖрд░рдкреАрдПрд╕ рдореЗрдВ, рдЯреЙрд░рдиреЗрдбреЛ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдирдП рд╕реНрдХреВрд▓ рдХреЗ рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕реНрдХреВрд▓ рдХреЛрд░рд╛рдЙрдЯреАрди рдХреЗ рд╕рд╛рде рдЯреЙрд░реНрдиреЗрдбреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдбрд╝рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо 50 рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рд╕реЛрддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдПрд╕рдУрд╡рд░ 80 рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ - рдпрд╣ рдХрд┐рд╕реА рднреА рдЧреЗрдЯ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред

1,500 рдЖрд░рдкреАрдПрд╕ рдореЗрдВ рдЯреЙрд░рдиреЗрдбреЛ рдХрд╛ рдирдпрд╛ рд╕реНрдХреВрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ Aiohttp рдЕрднреА рднреА 3,000 RPS рдХреА рд╕реАрдорд╛ рд╕реЗ рджреВрд░ рд╣реИред рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЕрднреА рдЖрдирд╛ рдмрд╛рдХреА рд╣реИред

рдкрд╛рдЗрдлреНрд▓реЗрдо, рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрд░реНрдлрд╝ рдХреА рд░реВрдкрд░реЗрдЦрд╛


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рд╕рдордп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред



рдЬрдм рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкрд╛рдпрдерди рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдпрд╣ рд╕рдм рдХреНрдпрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рд╕реАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рдпрд╛ рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдереАред Uber, Pyflame profiler рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░реАрди рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдЯреВрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ ptrace рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рд╣рдо рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреБрдЫ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ рд▓рдбрд╝рд╛рдХреВ рднрд╛рд░ рдлреЗрдВрдХрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рдпрд╣ рдмрд╣реБрдд рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ - рдХреЗрд╡рд▓ рдРрд╕реЗ рд▓реЛрдб рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг, рд▓реБрдХ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдЖрдк рдЙрд╕ рдкрд░ рдХреЙрдореНрдмреИрдЯ рд▓реЛрдб рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд░ рд╕рд░реНрд╡рд┐рд╕ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╕реЗрд╡рд╛ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдкрд╛рд╕ рдореЗрдВ рд╣реА рдкрд┐рдлрд▓реНрдо рдЪрд▓рд╛рдПрдВред рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдЕрд╡рдзрд┐ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдПрдХ рд╢рд╛рдВрдд рджреГрд╢реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рджреЗрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм cProfile рдХреА рддреБрд▓рдирд╛ рдореЗрдВред Pyflame рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рд╕реАрдзреЗ рдареЗрд╕ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрд╣реБрдд рдЧрд┐рд░рд╛рд╡рдЯ рдирд╣реАрдВ рдЖрдИред



рдпрд╣рд╛рдВ, рдПрдХреНрд╕ рдЕрдХреНрд╖ рд╕рдордп рдХреА рдорд╛рддреНрд░рд╛ рд╣реИ, рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЬрдм рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рд╕рднреА рдкрд╛рдпрдерди рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреА рд╕реВрдЪреА рдореЗрдВ рдерд╛ред рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рд░рд╛рд╢рд┐ рд╣реИ рдЬреЛ рд╣рдордиреЗ рд╕реНрдЯреИрдХ рдХреЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдлреНрд░реЗрдо рдореЗрдВ рдЦрд░реНрдЪ рдХреА рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ aiohttp рдореЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдмреЗрдХрд╛рд░ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рд▓рд┐рдд: рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдо рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЗрд╡рд╛ рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрд▓ рд╕реЗ рдирд┐рдкрдЯреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдЯреИрдХ рдХреА рдЧрд╣рд░рд╛рдИ рд▓рдЧрднрдЧ 15 рдлреНрд░реЗрдо рд╣реИред

рдЯреЙрд░реНрдиреЗрдбреЛ (рджреВрд╕рд░реА рддрд╕реНрд╡реАрд░) рдореЗрдВ рдПрдХ рд╣реА рднрд╛рд░ рдХреЗ рд╕рд╛рде, рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкрд░ рдмрд╣реБрдд рдХрдо рд╕рдордп рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдЯреИрдХ рдХреА рдЧрд╣рд░рд╛рдИ рд▓рдЧрднрдЧ 30 рдлреНрд░реЗрдо рд╣реЛрддреА рд╣реИред

рдпрд╣рд╛рдБ svg рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЖрдк рдЦреБрдж рдХреЛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ


 async def work(): #     await asyncio.sleep(SLEEP_TIME) class HardWorkHandler(tornado.web.RequestHandler): timeout_time = datetime.timedelta(seconds=SLEEP_TIME / 2) async def get(self): await work() #     await tornado.gen.multi([work(), work()]) #     try: await tornado.gen.with_timeout(self.timeout_time, work()) except tornado.util.TimeoutError: #     pass 

125 рдПрдордПрд╕ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВред



Uvloop рдХреЗ рд╕рд╛рде рдмрд╡рдВрдбрд░ рдмреЗрд╣рддрд░ рдкрдХрдбрд╝ рд░рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди Aiohttp uvloop рдХреБрдЫ рдЬреНрдпрд╛рджрд╛ рд╣реА рдорджрдж рдХрд░рддрд╛ рд╣реИред Aiohttp 2300-2400 RPS рдкрд░ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ uvloop рдХреЗ рд╕рд╛рде рдпрд╣ рд▓реЛрдб рд╕реАрдорд╛ рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИред рдЖрдпрд╛рдд рдХреА рдПрдХ рдкрдВрдХреНрддрд┐, рдФрд░ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╕реЗрд╡рд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреГрддреНрд░рд┐рдо рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреЛрд░рдЯрд╛рдЗрди рдХреА рдПрдХ рд╕рднреНрдп рдорд╛рддреНрд░рд╛ рдереАред рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, Aiohttp рдиреЗ рдЯреЛрд░рдиреЗрдбреЛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2.5 рдЧреБрдирд╛ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред
  • рджреВрд╕рд░рд╛ рддрдереНрдпред Uvloop рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ Aiohttp рдХреЗ рдкреНрд░рджрд░реНрд╢рди (Tornado рд╕реЗ рдмреЗрд╣рддрд░) рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
  • рдореИрдВрдиреЗ рдЖрдкрдХреЛ Pyflame рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдХреНрд╕рд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реАрдзреЗ рдЖрд╡реЗрджрди рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рддреЗ рд╣реИрдВред
  • рдФрд░ рд╣рдордиреЗ рдкреИрджрд╛рд╡рд╛рд░ (рдкреНрд░рддрд┐рдлрд▓) рд╕реЗ рдЙрдкрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХреАред

рдЗрди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рдЯреАрдо (рдФрд░ рдХреБрдЫ рдЕрдиреНрдп) рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкрд╛рдпрдерди рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд▓рд┐рдП рдЯреЙрд░рдиреЗрдбреЛ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ Aiohttp рдореЗрдВ рдЪрд▓реЗ рдЧрдПред

  • рдореБрдХрд╛рдмрд▓рд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕реАрдкреАрдпреВ рдХреА рдЦрдкрдд 2 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдШрдЯ рдЧрдИред
  • рд╣рдордиреЗ http рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ рд╕рдореНрдорд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
  • рд▓реЗрдЯреЗрдВрд╕реА рд╕реЗрд╡рд╛рдПрдВ 2 рд╕реЗ 5 рдмрд╛рд░ рдЧрд┐рд░ рдЧрдИрдВред

рдпрд╣рд╛рдБ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИ ред рдпрджрд┐ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/hi435532/


All Articles