рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рддрд┐рдХрдбрд╝реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ - рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпредрдЯреНрд░рд╛рдпрдиреЛ рдХреЛ рдЬрд╛рдирдирд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдЬреЛ рдПрд╕рд┐рдВрдХреЛрдпреЛ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрди рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрд╕рд┐рдирд╕рд┐рдпреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ, рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рддрд┐рдХрдбрд╝реА рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рджреЗрддреА рд╣реИредрдЬреЛ рд▓реЛрдЧ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрд░рд┐рдЪрдп рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд┐рдЬрд╝реНрдо рдХреНрдпрд╛ рд╣реИрдВредрд╕рдордХрд╛рд▓рд┐рдХрддрд╛ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛
рдореЗрдВ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рдПрдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреЗ "рджрд░реНрдж" рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдПрдХ рдереНрд░реЗрдб рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдкреВрд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдлреНрд░реАрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рджреЗрдХрд░ рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдЕрдкрдиреЗ рдЕрдВрддрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрдХреНрдпрд╛ рд╣реИ ?? рдпрд╣ рд╕рдЪ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ - рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЙрддреНрдкрд╛рджрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕реА рдЖрдкрдХреЛ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдзрд╛рдЧрд╛ рдХреБрдЫ рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рджреЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрд┐рд╕ рдзрд╛рдЧреЗ рдиреЗ рдирд┐рдпрдВрддреНрд░рдг рджрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдХрддрд╛рд░ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдЙрд╕ рд╕рдордп рддрдХ, рдЕрдкреЗрдХреНрд╖рд┐рдд рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рдШрдЯрд┐рдд рд╣реЛрдЧреА рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛редрдФрд░ рдЕрдм рд╣рдо рд╡рд╛рдкрд╕ рд╡рд╣реА рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣реИ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 () - рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдХреЙрд░рдЖрдЙрдЯ рдкреВрд░реНрд╡рд╡рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИредрд╕рдЪ рд╣реИ, рдЗрд╕рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрд░рдЯреАрди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛редрдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддреБрд▓рдирд╛рддреНрдордХ рд╕рдореАрдХреНрд╖рд╛ рдиреЗ рддреАрдиреЛрдВ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рдордЭ рдкреНрд░рджрд╛рди рдХреА рд╣реИред рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!