рддреАрдиреЛрдВ - рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

рдЫрд╡рд┐

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

рдЬреЛ рд▓реЛрдЧ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрд░рд┐рдЪрдп рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд┐рдЬрд╝реНрдо рдХреНрдпрд╛ рд╣реИрдВред

рд╕рдордХрд╛рд▓рд┐рдХрддрд╛ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛


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

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

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

Coroutines рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрди рдХреЛрд░рдЖрдЙрдЯреЛрдВ рдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдареАрдХ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд╛рдпрджреЗ рднреА рд╣реИрдВ- рд╡реЗ рд╡рд╕реНрддреБрдПрдБ рдЬрд┐рдирдореЗрдВ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдЕрднреА рддрдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИ; рдпрд╛ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Asyncio рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдлрд╡рд╛рд╣ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдореЗрдВ рдХрдИ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рддреАрдиреЛ рдмрдВрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред

рддрд┐рдХрдбрд╝реА


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ, рдирдерд╛рдирд┐рдПрд▓ рд╕реНрдорд┐рде рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдЬрдм рддрд┐рдХрдбрд╝реА рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рдереА, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд▓реНрдХрд╛ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдорд╛рдВрдЧ рдХреА, рдЬреЛ рд╕рд░рд▓рддрдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗред

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

рдпрд╣реА рд╣реИ, "рдмрдЪреНрдЪреЛрдВ рдХрд╛" рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рд╕рдм рдХреБрдЫ "рдЧрд┐рд░" рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Asyncio рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Asyncio рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг


рджреЛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдПрд╕рд┐рдВрдХреЛ

import asyncio

async def foo1():
    print('  foo1: ')
    await asyncio.sleep(2)
    print('  foo1: ')

async def foo2():
    print('  foo2: ')
    await asyncio.sleep(1)
    print('  foo2: ')

loop = asyncio.get_event_loop()
bundle = asyncio.wait([
    loop.create_task(foo1()),
    loop.create_task(foo2()),
])
try:
    loop.run_until_complete(bundle)
finally:
    loop.close()

рддрд┐рдХрдбрд╝реА

import trio

async def foo1():
    print('  foo1: ')
    await trio.sleep(2)
    print('  foo1: ')

async def foo2():
    print('  foo2: ')
    await trio.sleep(1)
    print('  foo2: ')

async def root():
    async with trio.open_nursery() as nursery:
        nursery.start_soon(foo1)
        nursery.start_soon(foo2)

trio.run(root)

рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛:

foo1: 
foo2: 
foo2: 
foo1: 

рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Asyncio рдФрд░ рддреАрдиреЛрдВ рдХреЛрдб рд╕рдорд╛рди рд╣реИред

рд╕реНрдкрд╖реНрдЯ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рддреАрдиреЛрдВ рдХреЛ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдереЛрдбрд╝рд╛ рдФрд░ рдЬреАрд╡рдВрдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЪрд▓реЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕реЗрд╡рд╛ рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред

Asyncio рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд aiohttp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ :

import time
import asyncio
import aiohttp

URL = 'https://yandex.ru/time/sync.json?geo=213'
MAX_CLIENTS = 5

async def foo(session, i):
    start = time.time()
    async with session.get(URL) as response:
        content = await response.json()
        print(f'{i} | {content.get("time")} (  {time.time() - start})')

async def root():
    start = time.time()
    async with aiohttp.ClientSession() as session:
        tasks = [
            asyncio.ensure_future(foo(session, i))
            for i in range(MAX_CLIENTS)
        ]
        await asyncio.wait(tasks)
    print(f'  {time.time() - start}')

ioloop = asyncio.get_event_loop()
try:
    ioloop.run_until_complete(root())
finally:
    ioloop.close()

рддрд┐рдХрдбрд╝реА рдХреЗ рд▓рд┐рдП рд╣рдо рдкреВрдЫрддреЗ рд╣реИрдВ :

import trio
import time
import asks
URL = 'https://yandex.ru/time/sync.json?geo=213'
MAX_CLIENTS = 5

asks.init('trio')

async def foo(i):
    start = time.time()
    response = await asks.get(URL)
    content = response.json()
    print(f'{i} | {content.get("time")} (  {time.time() - start})')

async def root():
    start = time.time()
    async with trio.open_nursery() as nursery:
        for i in range(MAX_CLIENTS):
            nursery.start_soon(foo, i)

    print(f'  {time.time() - start}')

trio.run(root)

рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ

0 | 1543837647522 (  0.11855053901672363)
2 | 1543837647535 (  0.1389765739440918)
3 | 1543837647527 (  0.13904547691345215)
4 | 1543837647557 (  0.1591191291809082)
1 | 1543837647607 (  0.2100353240966797)
  0.2102828025817871

рдЕрдЪреНрдЫрд╛ред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐
рдХреЛрд░рдЯрд╛рдЗрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рдПрд╕рд┐рдВрдХреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ ред

async def foo(session, i):
    start = time.time()
    if i == 3:
        raise Exception
    async with session.get(URL) as response:
        content = await response.json()
        print(f'{i} | {content.get("time")} (  {time.time() - start})')

1 | 1543839060815 (  0.10857725143432617)
2 | 1543839060844 (  0.10372781753540039)
5 | 1543839060843 (  0.10734415054321289)
4 | 1543839060874 (  0.13985681533813477)
  0.15044045448303223
Traceback (most recent call last):
  File "...py", line 12, in foo
    raise Exception
Exception

рддрд┐рдХрдбрд╝реА рдХреЗ рд▓рд┐рдП

async def foo(i):
    start = time.time()
    response = await asks.get(URL)
    content = response.json()
    if i == 3:
        raise Exception
    print(f'{i} | {content.get("time")} (  {time.time() - start})')


4 | 1543839223372 (  0.13524699211120605)
2 | 1543839223379 (  0.13848185539245605)
Traceback (most recent call last):
  File "...py", line 28, in <module>
    trio.run(root)
  File "/lib64/python3.6/site-packages/trio/_core/_run.py", line 1337, in run
    raise runner.main_task_outcome.error
  File "...py", line 23, in root
    nursery.start_soon(foo, i)
  File "/lib64/python3.6/site-packages/trio/_core/_run.py", line 397, in __aexit__
    raise combined_error_from_nursery
  File "...py", line 15, in foo
    raise Exception
Exception

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рддреАрдиреЛрдВ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдХреА рдШрдЯрдирд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, "рд░рджреНрджреАрдХрд░рдг рдХреНрд╖реЗрддреНрд░" рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдЬрд┐рди рдЪрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рдХреЛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Asyncio рдореЗрдВ, рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЯреНрд░реИрдХрдмреИрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред

рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдХрд╛рд░реНрдп рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдкрд░рдорд╛рдгреБрддрд╛ рдХрд╛ рдЧреБрдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдкреНрд░рддреАрдХреНрд╖рд╛ asyncio.wait (рдХрд╛рд░реНрдпреЛрдВ, return_when = FIRST_EXCEPTION) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЦреБрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд╕рд╛рде рдХрдИ рд╕рдорд╛рди рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рд╛рдкреНрдд рдкрд╣рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

import asyncio
from asyncio import FIRST_COMPLETED
import aiohttp

URL = 'https://yandex.ru/time/sync.json?geo=213'
MAX_CLIENTS = 5

async def foo(session):
    async with session.get(URL) as response:
        content = await response.json()
        return content.get("time")

async def root():
    async with aiohttp.ClientSession() as session:
        tasks = [
            asyncio.ensure_future(foo(session))
            for i in range(1, MAX_CLIENTS + 1)
        ]
        done, pending = await asyncio.wait(tasks, return_when=FIRST_COMPLETED)
        print(done.pop().result())
        for future in pending:
            future.cancel()

ioloop = asyncio.get_event_loop()
try:
    ioloop.run_until_complete(root())
except:
    ioloop.close()

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗрд╡рд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рддреАрдиреЛрдВ рдореЗрдВ, рдПрдХ рд╕рдорд╛рди рдкреИрдВрддрд░реЗрдмрд╛рдЬрд╝реА рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди "рдкреВрдВрдЫ" рдХреЛ рдЕрджреГрд╢реНрдп рд░реВрдк рд╕реЗ рджреВрд░ рдЫреЛрдбрд╝рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ:

import trio
import asks
URL = 'https://yandex.ru/time/sync.json?geo=213'
MAX_CLIENTS = 5
asks.init('trio')

async def foo(session, send_channel, nursery):
    response = await session.request('GET', url=URL)
    content = response.json()
    async with send_channel:
        send_channel.send_nowait(content.get("time"))
    nursery.cancel_scope.cancel()

async def root():
    send_channel, receive_channel = trio.open_memory_channel(1)
    async with send_channel, receive_channel:
        async with trio.open_nursery() as nursery:
            async with asks.Session() as session:
                for i in range(MAX_CLIENTS):
                    nursery.start_soon(foo, session, send_channel.clone(), nursery)

        async with receive_channel:
            x = await receive_channel.receive()
            print(x)

trio.run(root)

nursery.cancel_scope.cancel () - рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдХреЙрд░рдЖрдЙрдЯ рдкреВрд░реНрд╡рд╡рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдЪ рд╣реИ, рдЗрд╕рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрд░рдЯреАрди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддреБрд▓рдирд╛рддреНрдордХ рд╕рдореАрдХреНрд╖рд╛ рдиреЗ рддреАрдиреЛрдВ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рдордЭ рдкреНрд░рджрд╛рди рдХреА рд╣реИред рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

All Articles