рдХреНрдпрд╛ рдкрд╛рдпрдерди рдЬреАрдЖрдИрдПрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореГрдд рд╣реИ?

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЕрдЧрд▓реЗ рд╕реЛрдорд╡рд╛рд░, рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдирдП рд╕рдореВрд╣ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрдВрдЧреА, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬреЛ рд╣рдо рдЕрдм рдХрд░реЗрдВрдЧреЗред рдЕрдЪреНрдЫреА рдкрдврд╛рдИ рд╣реЛред



2003 рдореЗрдВ рд╡рд╛рдкрд╕, рдЗрдВрдЯреЗрд▓ рдиреЗ рдирдпрд╛ рдкреЗрдВрдЯрд┐рдпрдо 4 "рдПрдЪрдЯреА" рдкреНрд░реЛрд╕реЗрд╕рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ред рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ 3GHz рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рдФрд░ рд╣рд╛рдЗрдкрд░-рдереНрд░реЗрдбрд┐рдВрдЧ рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ред



рдЕрдЧрд▓реЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдЗрдВрдЯреЗрд▓ рдФрд░ рдПрдПрдордбреА рдиреЗ рдмрд╕ рдХреА рдЧрддрд┐, рдПрд▓ 2 рдХреИрд╢ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдФрд░ рд╡рд┐рд▓рдВрдмрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ред 2004 рдореЗрдВ, 3 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ HT рдореЙрдбрд▓ рдХреЛ 580 рдкреНрд░реАрд╕реНрдХреЙрдЯ рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рдХреНрд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 4 GHz рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдбрд╝реА рдХреА рдЖрд╡реГрддреНрддрд┐ рдмрдврд╝рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдЙрдЪреНрдЪ рдмрд┐рдЬрд▓реА рдХреА рдЦрдкрдд рдФрд░ рдЧрд░реНрдореА рд▓рдВрдкрдЯрддрд╛ рд╕реЗ рдкреАрдбрд╝рд┐рдд рдереЗред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрдЬ 4 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХрд╛ рдбрд┐рд▓реАрд╡рд░ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдорд╛рд░реНрдЧ рдЕрдВрддрддрдГ рдмрд╕ рдХреА рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред 2006 рдореЗрдВ, рдЗрдВрдЯреЗрд▓ рдХреЛрд░ 2 рдиреЗ рдкреЗрдВрдЯрд┐рдпрдо 4 рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдШрдбрд╝реА рдХреА рдЧрддрд┐ рдмрд╣реБрдд рдХрдо рдереАред

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

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

GIL рдХреНрдпрд╛ рд╣реИ?


GIL (Global Interpreter Lock) рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рдореЗрдВ рдПрдХ рдореНрдпреВрдЯреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рд╣реИред рдореБрдЦреНрдп CPython bytecode рдЧрдгрдирд╛ рд▓реВрдк рдореЗрдВ рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреМрди рд╕рд╛ рдзрд╛рдЧрд╛ рдирд┐рд░реНрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

CPython рдПрдХ рдПрдХрд▓ рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдереНрд░реЗрдбреНрд╕ рдХреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GIL рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрджрд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдЕрдм рдЧрддрд┐рд░реЛрдз рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реНрддрд░ рдкрд░ рдХрд┐рд╕реА рднреА рдЪрд░ рдпрд╛ рдХреНрд░реИрд╢ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдЬреАрдЖрдИрдПрд▓ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред



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

GIL рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2009 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдХрдИ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж рднреА рдЕрдЫреВрддрд╛ рд░рд╣рд╛ред

рдЬреАрдЖрдИрдПрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рд▓реЙрдХрд┐рдВрдЧ рдХреЛ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд┐рд╕рдиреЗ рднреА 2003 рдореЗрдВ рд╣рд╛рдЗрдкрд░рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╡рд╣ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ред

рд╕реАрдкреАрдереЙрди рдореЗрдВ рдЧрд┐рд▓ рдХрд╛ рдкрд░рд┐рддреНрдпрд╛рдЧ


рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдкреАрдереЙрди рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реАрдкреАрдереЙрди 2.6 рдореЗрдВ, рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдиреЗ CPython рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреАрдврд╝реА (рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдкрдиреЗ GIL рдХреЗ рд╕рд╛рде) рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред

from multiprocessing import Process def f(name): print 'hello', name if __name__ == '__main__': p = Process(target=f, args=('bob',)) p.start() p.join() 


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

рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрдХ рдХрддрд╛рд░ рдпрд╛ рдЪреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЦрд╛рдореА рд╣реИред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рднрд╛рд░ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдФрд░ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ рдХреЗ рднреА CPython рдХрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдЯрд╛рдЗрдо 100-200 ms (рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП https://hackernoon.com/which-is-the-fastest-version-of-python-2ae7c61a6b2b ) рджреЗрдЦреЗрдВред

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

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рдЬреИрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

PEP554 рдФрд░ GIL рдХреА рдореМрдд?


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

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

CPython 3.8 рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ PEP554 рд╣реИ, рдЬреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рдирдП interpreters рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЙрдк-рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдФрд░ рдПрдкреАрдЖрдИ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

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



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

рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рддрд░рд╣, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдФрд░ рдЖрдИрдкреАрд╕реА рдлреЙрд░реНрдо (рдиреЗрдЯрд╡рд░реНрдХ, рдбрд┐рд╕реНрдХ рдпрд╛ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, marshal рдореЙрдбреНрдпреВрд▓, pickle рдореЙрдбреНрдпреВрд▓, рдпрд╛ рдЕрдзрд┐рдХ рдорд╛рдирдХреАрдХреГрдд рддрд░реАрдХреЗ рдЬреИрд╕реЗ рдХрд┐ json рдпрд╛ simplexml ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдПрдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд▓реЛрдб рджреЗрддреЗ рд╣реИрдВред

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



рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ API рдЕрднреА рднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 import _xxsubinterpreters as interpreters import threading import textwrap as tw import marshal # Create a sub-interpreter interpid = interpreters.create() # If you had a function that generated some data arry = list(range(0,100)) # Create a channel channel_id = interpreters.channel_create() # Pre-populate the interpreter with a module interpreters.run_string(interpid, "import marshal; import _xxsubinterpreters as interpreters") # Define a def run(interpid, channel_id): interpreters.run_string(interpid, tw.dedent(""" arry_raw = interpreters.channel_recv(channel_id) arry = marshal.loads(arry_raw) result = [1,2,3,4,5] # where you would do some calculating result_raw = marshal.dumps(result) interpreters.channel_send(channel_id, result_raw) """), shared=dict( channel_id=channel_id ), ) inp = marshal.dumps(arry) interpreters.channel_send(channel_id, inp) # Run inside a thread t = threading.Thread(target=run, args=(interpid, channel_id)) t.start() # Sub interpreter will process. Feel free to do anything else now. output = interpreters.channel_recv(channel_id) interpreters.channel_release(channel_id) output_arry = marshal.loads(output) print(output_arry) 


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

рдпрд╣ рдЕрдХреНрд╖рдо рджрд┐рдЦрддрд╛ рд╣реИ


marshal рдореЙрдбреНрдпреВрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрддрдиреА рддреЗрдЬреА рд╕реЗ рдирд╣реАрдВ рдЬрд┐рддрдирд╛ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реАрдзреЗ рдореЗрдореЛрд░реА рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ред

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

рдирдП рдПрдкреАрдЖрдИ рдХреЛ (рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ) рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ -

 import _xxsubinterpreters as interpreters import threading import textwrap as tw import pickle # Create a sub-interpreter interpid = interpreters.create() # If you had a function that generated a numpy array arry = [5,4,3,2,1] # Create a channel channel_id = interpreters.channel_create() # Pre-populate the interpreter with a module interpreters.run_string(interpid, "import pickle; import _xxsubinterpreters as interpreters") buffers=[] # Define a def run(interpid, channel_id): interpreters.run_string(interpid, tw.dedent(""" arry_raw = interpreters.channel_recv(channel_id) arry = pickle.loads(arry_raw) print(f"Got: {arry}") result = arry[::-1] result_raw = pickle.dumps(result, protocol=5) interpreters.channel_send(channel_id, result_raw) """), shared=dict( channel_id=channel_id, ), ) input = pickle.dumps(arry, protocol=5, buffer_callback=buffers.append) interpreters.channel_send(channel_id, input) # Run inside a thread t = threading.Thread(target=run, args=(interpid, channel_id)) t.start() # Sub interpreter will process. Feel free to do anything else now. output = interpreters.channel_recv(channel_id) interpreters.channel_release(channel_id) output_arry = pickle.loads(output) print(f"Got back: {output_arry}") 

рдпрд╣ рдкреИрдЯрд░реНрди рджрд┐рдЦрддрд╛ рд╣реИ


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

рдЬреИрд╕реЗ рд╣реА рдпрд╣ PEP рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓реАрди рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо PyPi рдореЗрдВ рдХрдИ рдирдП API рджреЗрдЦреЗрдВрдЧреЗред

рдЙрдкрдареЗрдХреЗрджрд╛рд░ рдХреЗ рдкрд╛рд╕ рдХрд┐рддрдирд╛ рдУрд╡рд░рд╣реЗрдб рд╣реИ?


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

  • __main__ рдФрд░ importlib рдореЗрдВ рдореЙрдбреНрдпреВрд▓;
  • sys рдбрд┐рдХреНрд╢рдирд░реА рдХреА рд╕рд╛рдордЧреНрд░реА;
  • рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ ( print() , assert , рдЖрджрд┐);
  • рдмрд╣рддреА рд╣реИ;
  • рдХрд░реНрдиреЗрд▓ рд╡рд┐рдиреНрдпрд╛рд╕ред


рдХрд░реНрдиреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдореЗрдореЛрд░реА рд╕реЗ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ рдЗрдВрдкреЛрд░реНрдЯрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдзреАрдорд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рд╕рдм-рдбреЗрдкреЗрдВрдЯрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд▓рд╛рдн рдХрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

Asyncio рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?


рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ asyncio рдЗрд╡реЗрдВрдЯ asyncio рдХрд╛ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдореБрдЦреНрдп рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рд░рд╛рдЬреНрдп рднреА asyncio (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬреАрдЖрдИрдПрд▓ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ)ред

PEP554 рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рдж, рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Python 3.9 рдореЗрдВ, рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдиреЗ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ), рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЙрдк-рд╡реНрдпрд╛рдЦреНрдпрд╛рддрд╛рдУрдВ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЗ рдЪрд▓рд╛рддрд╛ рд╣реИред

рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЭреЗ рднреА рд▓рдкреЗрдЯреЛ!


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ (рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ 3.7 <) рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддреА рд╣реИред

PyCon sprints рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдХреА рд╕реНрдерд┐рддрд┐ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреА рдУрд░ рдмрдврд╝рдиреЗ рд▓рдЧрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдкреНрд░рдХрд╛рд░рдХ рдХрд╛ рдЕрдкрдирд╛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ (рдЬреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд╣реЛрдЧрд╛ред

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

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

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрднреА рднреА рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖: рдХреНрдпрд╛ GIL рдЕрдм рд╕рдЪ рд╣реИ?


рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП GIL рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, PEP554 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХрд╛ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рдЕрдЪрд╛рдирдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк Python 3.8 рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛрдВрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдЯрд┐рдХрдЯ рднреА рд╣реИ!

рдХрдм?


рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪрд╛рд░ v5 рдФрд░ рдореЗрдореЛрд░реА рд╢реЗрдпрд░рд┐рдВрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкрд╛рдпрдерди 3.8 (рдЕрдХреНрдЯреВрдмрд░ 2019) рдореЗрдВ рд╣реЛрдЧреА, рдФрд░ рдЙрдк-рджреБрднрд╛рд╖рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 3.8 рдФрд░ 3.9 рдХреЗ рдмреАрдЪ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╕реНрддреБрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рд╢рд╛рдЦрд╛ рдмрдирд╛рдИ: https://github.com/tonybaloney/cpython/tree/subinterpretersред

рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреЗрдВ рдФрд░ рдЖрдкрдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рдкрд░ рджреЗрдЦреЗрдВред

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


All Articles