рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрд╛рдпрдерди: рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд░реВрдк

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

рд╢рдмреНрджреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛:


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рддрдХрдиреАрдХреА рдкрд╣рд▓реБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдХреНрд╕рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╢рд░реНрддреЛрдВ рдХреА рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рд╣реИред

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

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

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

рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛:

рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рджреЛ рдХрд╛рд░реНрдп рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рд╣рдордиреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рддреЛ рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдПрдХ рдкрддреНрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗ, рдлрд┐рд░ рдПрдХ рджреМрд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдореЗрдВред рдПрдЬреЗрдВрд╕реАред рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рд╣реИ ред

рдЬрдм рд╣рдордиреЗ рдПрдХ рджреЛрд╕реНрдд рдХреЛ рдлреЛрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдФрд░ рдЦреБрдж рдПрдХ рдкрддреНрд░ рд▓рд┐рдЦрд╛, рддреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд┐рдП рдЧрдПред

рдХреЙрдиреНрд╕реИрд░реЗрд╕реА рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдПрдХ рд░реВрдк рд╣реИред рд▓реЗрдХрд┐рди concurrency рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ CPU рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреЛрд░ рд╣реИ, рддреЛ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рдмрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреЛ рдЖрдкрд╕ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдпрд╣ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдЧрд╛рдорд┐рддрд┐ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рджреЛрд╕реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдХреЛрд░ рд╣реЛрддреЗ рд╣реИрдВ , рдЬреЛ рджреВрд╕рд░рд╛ рдХреЛрд░ рд╣реИ, рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджрдХ] рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдСрдкрд░реЗрд╢рди (рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

  • рддреБрд▓реНрдпрдХрд╛рд▓рди: рдмреНрд▓реЙрдХ рд╕рдВрдЪрд╛рд▓рди (рдЕрд╡рд░реБрджреНрдз)
  • рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ: рдСрдкрд░реЗрд╢рди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз)
  • рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХрддрд╛: рд╕рдВрдпреБрдХреНрдд рдкреНрд░рдЧрддрд┐ (рд╕рдВрдпреБрдХреНрдд)
  • рд╕рдорд░реВрдкрддрд╛: рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рдЧрддрд┐ (рд╕рдорд╛рдирд╛рдВрддрд░)

рдХреЙрдирдХреНрдпреВрд░реЗрд╕реА рдХрд╛ рдорддрд▓рдм рд╣реИ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ред рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рд╣рдореЗрд╢рд╛ рдирд┐рд░реНрдгрд╛рдпрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рд╕реВрддреНрд░ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ


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

рд╕реНрдЯреНрд░реАрдо (рдзрд╛рдЧреЗ)

рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдирд┐рдореНрди рдХреЛрдб рдореЗрдВ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрдХ рд╕рд╛рде рдХрдИ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

import threading import time import random def worker(number): sleep = random.randrange(1, 10) time.sleep(sleep) print("I am Worker {}, I slept for {} seconds".format(number, sleep)) for i in range(5): t = threading.Thread(target=worker, args=(i,)) t.start() print("All Threads are queued, let's see when they finish!") 

рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

 $ python thread_test.py All Threads are queued, let's see when they finish! I am Worker 1, I slept for 1 seconds I am Worker 3, I slept for 4 seconds I am Worker 4, I slept for 5 seconds I am Worker 2, I slept for 7 seconds I am Worker 0, I slept for 9 seconds 

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

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдереНрд░реЗрдб рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд┐рдпрд╛ред рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ (OOP рд╢реИрд▓реА) рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рдереЗред

рдЖрдЧреЗ рдкрдврд╝рдиреЗ:

рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


рдЧреНрд▓реЛрдмрд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рд▓реЙрдХ (GIL)

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

GIL рддреНрд╡рд░рд┐рдд рд╡рд┐рд╡рд░рдг:

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

рдХрдИ рд▓реЛрдЧ рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдХрдордЬреЛрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЖрд╢реАрд░реНрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ NumPy, SciPy рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдП рдЧрдП рдереЗ, рдЬреЛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд╕рдореБрджрд╛рдп рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖, рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЧреЗ рдкрдврд╝рдиреЗ:

рдпреЗ рд╕рдВрд╕рд╛рдзрди рдЖрдкрдХреЛ рдЬреАрдЖрдИрдПрд▓ рдореЗрдВ рд╡рд┐рд▓рдВрдм рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ:


рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ (рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ)

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

рдЪрд▓рд┐рдП рдмрд╕ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдЕрдм рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдЯреНрд░реАрдо рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

 import multiprocessing import time import random def worker(number): sleep = random.randrange(1, 10) time.sleep(sleep) print("I am Worker {}, I slept for {} seconds".format(number, sleep)) for i in range(5): t = multiprocessing.Process(target=worker, args=(i,)) t.start() print("All Processes are queued, let's see when they finish!") 

рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░, рдПрдХ рдзрд╛рдЧреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╡рд╣ рд╕рдм рд╣реИ! рдЕрдм, рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╕реАрдкреАрдпреВ рдХреЛрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬрдм рддрдХ рдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдХрдИ рдХреЛрд░ рд╣реИрдВ)ред

рдкреВрд▓ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рднреА рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрд╕ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': p = Pool(5) print(p.map(f, [1, 2, 3])) 

рдпрд╣рд╛рдВ, рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдиреЗ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдл рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ f (1), рджреВрд╕рд░реА f (2), рдФрд░ рджреВрд╕рд░реА f (3) рдХрд░рддреА рд╣реИред рдЕрдВрдд рдореЗрдВ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рднрд╛рд░реА рдЧрдгрдирд╛рдУрдВ рдХреЛ рдЫреЛрдЯреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддреЗрдЬ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдЧреЗ рдкрдврд╝рдиреЗ:


рд╕рдорд╡рд░реНрддреА.рд╕реБрдзрд╛рд░ рдореЙрдбреНрдпреВрд▓

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

рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ ThreadPoolExecutor:

 from concurrent.futures import ThreadPoolExecutor from time import sleep def return_after_5_secs(message): sleep(5) return message pool = ThreadPoolExecutor(3) future = pool.submit(return_after_5_secs, ("hello")) print(future.done()) sleep(5) print(future.done()) print(future.result()) 

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╡рд░реНрддреА .futures masnun.com/2016/03/29/python-a-quick-introduction-to-the-concurrent-futures-module.html рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд╣реИред рдпрд╣ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЧрд╣рди рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЧреЗ рдкрдврд╝рдиреЗ:


Asyncio - рдХреНрдпрд╛, рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ?


рдЖрдкрдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рд╕рдореБрджрд╛рдп рдХреЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ - рдПрд╕рд┐рдВрдХреЛ рдХреНрдпрд╛ рдирдпрд╛ рд▓рд╛рддрд╛ рд╣реИ? рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдХреНрдпреЛрдВ рдерд╛? рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзрд╛рдЧреЗ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдирд╣реАрдВ рдереАрдВ? рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ!

рд╣рдореЗрдВ рдПрд╕рд┐рдВрдХреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

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

T3 рддреИрдпрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рджреБрднрд╛рд╖рд┐рдпрд╛ рдиреЗ рдкрд╣рд▓реЗ T2 рдФрд░ T1 рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ - рдпрд╣ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреА рд▓рд╛рдЧрдд рдереА, рдЬрд┐рд╕реЗ рд╣рдо рдЯрд╛рд▓ рд╕рдХрддреЗ рдереЗ рдЕрдЧрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдкрд╣рд▓реЗ T3 рдкрд░ рдЬрд╛рддрд╛, рддреЛ рд╕рд╣реА?

рдПрд╕рд┐рдиреЛ рдХреНрдпрд╛ рд╣реИ?

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

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

Asyncio рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯрд░ рдФрд░ рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдБ рд╡рд┐рд╡рд░рдг рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:


Asyncio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?

рдЖрд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

 import asyncio import datetime import random async def my_sleep_func(): await asyncio.sleep(random.randint(0, 5)) async def display_date(num, loop): end_time = loop.time() + 50.0 while True: print("Loop: {} Time: {}".format(num, datetime.datetime.now())) if (loop.time() + 1.0) >= end_time: break await my_sleep_func() loop = asyncio.get_event_loop() asyncio.ensure_future(display_date(1, loop)) asyncio.ensure_future(display_date(2, loop)) loop.run_forever() 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╛рдЗрдерди 3.5 рдФрд░ рдмрд╛рдж рдореЗрдВ рдХреЗрд╡рд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ:

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбрд┐рд╕реНрдкреНрд▓реЗ_рдбреЗрдЯ рдлрдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдирдВрдмрд░ (рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░ рдПрдХ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред
  • рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ 50 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди, рд╡рд╣ рдмрд╛рд░-рдмрд╛рд░ рд╕рдордп рдкреНрд░рд┐рдВрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рд░реБрдХ рдЬрд╛рддреА рд╣реИред рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдорд╛рд░реЛрд╣ рдЕрдиреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдХреЛрд░рдЯрд╛рдЗрди)ред
  • рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВ (рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП_рд╕рдВрдпрдо рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
  • рд╣рдо рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

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

рд╕рд╣реА рдЪреБрдирд╛рд╡ рдХрд░рдирд╛ред


рд╣рдо рд╕рд┐рд░реНрдл рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрдкреЛрдВ рд╕реЗ рдЧреБрдЬрд░реЗред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдореИрдВ рдЗрд╕ рдЫрджреНрдо рд╕рдВрд╣рд┐рддрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ:

 if io_bound: if io_very_slow: print("Use Asyncio") else: print("Use Threads") else: print("Multi Processing") 

  • рд╕реАрдкреАрдпреВ рдмрд╛рдЙрдВрдб => рдорд▓реНрдЯреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
  • рдЖрдИ / рдУ рдмрд╛рдЙрдВрдб, рдлрд╛рд╕реНрдЯ рдЖрдИ / рдУ, рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ => рдорд▓реНрдЯреА рдереНрд░реЗрдбрд┐рдВрдЧ
  • I / O рдмрд╛рдЙрдВрдб, рдзреАрдорд╛ I / O, рдХрдИ рдХрдиреЗрдХреНрд╢рди => Asyncio

[рдиреЛрдЯред рдЕрдиреБрд╡рд╛рджрдХ]

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


All Articles