рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рдЕрднрд┐рдЧрдо рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдордп рдХрдИ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рддреА рд╣реИред
рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджрд┐рдЦрддрд╛ рд╣реИ:рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдПрдХ рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛ (рдПрд╕) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрди рдП рд╣реИ, рдЬреЛ рдПрд╕ред рдЕрдиреБрд░реЛрдз рдЖрд░ 1 рдЕрдкрдбреЗрдЯ рдП рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд╣ рдПрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп, рдЖрд░ 2 рдЖрддрд╛ рд╣реИ, рдпрд╣ рдПрд╕ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЖрд░ 2 рдкрд░ рдмрд╛рдж рдореЗрдВ рдЖрдП рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд╕ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдХрд╛рд░рдг - рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд (рдЪрд┐рддреНрд░ 1 рджреЗрдЦреЗрдВ)ред

рдЪрд┐рддреНрд░ 1ред рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм R1 рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА R2 рдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рд▓реЗ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рдВрд╕рд╛рдзрди A рдХреЛ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдСрдкрд░реЗрд╢рди R2 рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рд╡рд╣рд╛рдВ рддреБрдореНрд╣рд╛рд░реА рджреМрдбрд╝ рдХреА рд╣рд╛рд▓рдд рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдХреЛрд▓реНрдпрд╛ рдХреА рдПрдХ рдкрддреНрдиреА рдФрд░ рдПрдХ рдмреИрдВрдХ рдЦрд╛рддрд╛ рд╣реИред рдХреЛрд▓реНрдпрд╛ рдФрд░ рдЙрдирдХреА рдкрддреНрдиреА рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдирдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рд╕рдорд╛рди рдЕрдзрд┐рдХрд╛рд░ рдФрд░ рдПрдХ рдЖрдо рдмрдЬрдЯ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЦрд╛рддреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рдХрд╛рд░реНрдб рд╣реИред рдХреЛрд▓реНрдпрд╛ рдлреНрд░реАрд▓рд╛рдиреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдордп рдЖрддрд╛ рд╣реИ рдЬрдм рдЙрд╕реЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрддреНрдиреА рдХреЛрд▓реНрдпрд╛ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреА рд╣реИ, рдФрд░ рдЙрд╕реЗ рдбреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ iPad2 рджреЗрддреА рд╣реИред рд╕реБрдмрд╣ рд╕реЗ рдЙрдарддреЗ рд╣реБрдП, рд╡рд╣ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдкрд░ $ $ рдкрд╛рддреА рд╣реИ! рд╣рд░реНрд╖рд┐рдд рд╡рд╣ iPad2 рдЕрдкрдиреЗ рдкрддрд┐ рдФрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдШрдбрд╝реА рдХрд╛ рдЖрджреЗрд╢ рджреЗрддреА рд╣реИред рдЬрдм рдХреЛрд▓реНрдпрд╛ рдмреИрдВрдХ рдЦрд╛рддреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ "рдЕрднреА рднреА" рд╢реВрдиреНрдп рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдирд╡реАрдирддрдо рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╢рд╛рдк рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдХреЛрд▓рд╛рдпрд╛ - рдЕрдиреБрд░реЛрдз 1, рдЙрд╕рдХреА рдкрддреНрдиреА - рдЕрдиреБрд░реЛрдз 2, рдПрдХ рдмреИрдВрдХ рдЦрд╛рддрд╛ - рдПрдХ рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛ рдкрд░ рдПрдХ рд╕рдВрд╕рд╛рдзрди, рдмреИрдВрдХ рдХрд╛рд░реНрдб - рдПрдХ рджреВрд░рд╕реНрде рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реАред
рдХреЛрд▓реНрдпрд╛ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЙрдирдХреА рдкрддреНрдиреА рдФрд░ рдмреИрдВрдХ рдЦрд╛рддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╡рд┐рддреНрддреАрдп рд╕реЗрд╡рд╛рдПрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдирдбреАрдП рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рд░ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдХреИрд╕реЗ рд▓рдбрд╝рдирд╛ рд╣реИ
рд╣рдо рдореБрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдбрд╝реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд┐рд╕реА рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕рдорд╛рдзрд╛рди рд╕рдВрд╕рд╛рдзрди рдП рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд┐рд░реНрдорд╛рдг рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ: рд╕реЗрдореАрдлреЛрд░, рдореНрдпреВрдЯреЗрдХреНрд╕, рд╕рд╢рд░реНрдд рдЪрд░ред рдореБрджреНрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рддреЛ, рдореНрдпреВрдЯреЗрдХреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдХреНрдпреЛрдВ рдореНрдпреВрдЯреЗрдХреНрд╕? рдХреНрдпреЛрдВрдХрд┐ рд╕рд╢рд░реНрдд рдЪрд░ рддреБрдЪреНрдЫ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрдорд╛рдлреЛрд░ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЕрднреА рддрдХ рдПрдХ рдЖрд╡реЗрджрди рдирд╣реАрдВ рдЦреЛрдЬ рдкрд╛рдпрд╛ рд╣реВрдВ)ред
рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?
рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ, рдПрдХ рдзрд╛рд░рд╛ рдмрд╕ рд╕реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ - рдпрджрд┐ рд╣рдо рд╕реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, time.sleep (100)) - рддреЛ рд╕рдм рдХреБрдЫ рдПрдХ рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛, рдФрд░ рд╣рдо рдХрднреА рднреА рдХрд┐рд╕реА рдЪреАрдЬ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪрдСрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рд╣рдо рд╕реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ - рдирд╣реАрдВ рд╣реЛрдЧрд╛
рд╡рд┐рдХрд▓реНрдк рдЧрд▓рдд рд╣реИред рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЙрдЯрд░ (1, self.some_method, * args), рдЬрд╣рд╛рдВ self.some_method рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд▓реЙрдХ рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдиреБрдХрд╕рд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рдХреЛрдбред
- рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрд░реЛрдз рдЖрд░рдПрди рдлрд┐рд░ рд╕реЗ рдП рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░реЗрдЧрд╛ред
рд╡рд┐рдХрд▓реНрдкред рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╕рд╣реА рд╡рд┐рдХрд▓реНрдкред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Deferreds рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рд╖реНрдХрд░реНрд╖ - рддрд╛рд▓рд╛ Deferred'ah рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
class Mutex(object): def __init__(self): self.locked = False self.waiters = list() def acquire(self): d = Deferred() if self.locked: self.waiters.append(d) else: self.locked = True d.callback(True) return d def release(self): self.locked = False if self.waiters: self.locked = True d = self.waiters.pop() d.callback(True)
рдбрд┐рдЬрд╛рдЗрди рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рд╣рдо рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕реНрдердЧрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо Deferred рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд░реНрдЧ рдЦреБрдж рд╣реА Deferreds рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдХрддрд╛рд░ рд╕реЗ рдЕрдЧрд▓реЗ рдПрдХ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ; рдореБрдбрд╝ (DeferredLock) рдореЗрдВ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
http://twistedmatrix.com/trac/browser/tags/releases/twisted-11.0.0/twisted/nternet/defer.py ред DeferredSemaphore рднреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЖрдк рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЖрдк рдЗрд╕реЗ рдРрд╕рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдпрдВ рд╣реА рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ:
class ImportantObject(object): def __init__(self): self.lock = defer.DeferredLock() def get_lock(self): return self.lock.acquire() def release_lock(self): return self.lock.release()
рдпрд╛, рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ рдФрд░ рд╕рддреНрд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ (рдЬреЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдЖрдИрдбреА 1 рдХреЗ рд╕рд╛рде ImportantObject рдЕрд▓рдЧ рд╣реЛрдЧрд╛), рддреЛ рдЖрдк рд▓реЙрдХ рдкреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
class Pool(object): __metaclass__ = Singleton def __init__(self, objects_list): self.__objects = dict() for o in objects_list: self.__objects[o.id] = defer.DeferredLock() def acquire(self, o): if o.id not in self.__objects: self.__objects[o.id] = defer.DeferredLock() return self.__objects[o.id].acquire() def release(self, o): self.__objects[o.id].release()
рдпрд╣рд╛рдБ рдкреВрд▓ рдереЛрдбрд╝рд╛ рд╕рд░рд▓реАрдХреГрдд рд╣реИ, рд╣рдо рдореЙрдирд┐рдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ "рднреВрд▓ рдЧрдП" рддрд╛рдХрд┐ рд▓реЗрдЦ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рдо рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд╕реЗ рднреА рдЪреВрдХ рдЧрдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдвреВрдВрдврдирд╛ / рдмрдирд╛рдирд╛ рдХрд┐рд╕реА рдиреМрд╕рд┐рдЦрд┐рдП рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдФрд░ рдЕрдВрдд рдореЗрдВ:
def multiplex(self, a): def get_value_from_remote_service(skipped, a): d = some_service.do_long_boring_call(a) return d def multiply(result, a): return result*a d = Pool().acquire(a) d.addCallback(get_value_from_remote_service, a) d.addCallback(power,a) return d
рдкреБрдирд╢реНрдЪ: рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдбрд╝ рдкреНрд░рд▓реЗрдЦрди рд╕рдВрдкреВрд░реНрдг рд╕реЗ рджреВрд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдЕрдЧрд░ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 30 рдкреНрд░рддрд┐рд╢рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВрдиреЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ 3 рджрд┐рдиреЛрдВ рдХреЗ рднреАрддрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдЗрдХрд┐рд▓реЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдореБрдбрд╝ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реИред рддреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд▓рд╛рд╣ - рдореБрдбрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ - рд╕реНрд░реЛрдд рдХреЛ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ, рд╕рд╛рдЗрдХрд┐рд▓ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореБрдбрд╝ рджрд╕реНрддрд╛рд╡реЗрдЬредрд╕реВрддреНрд░реЛрдВ рдиреЗ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд┐рдпрд╛