рд╕реНрдЯреИрдХрд▓реЗрд╕ рдкрд╛рдпрдерди рдФрд░ рд╕рд╣рдорддрд┐

Stackless рдФрд░ Concurrence рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВ рдЬреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:



socket() bind() listen() accept() fork() -> read() write() ... close()
      
      





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



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



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



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



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



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



 select() -> read_ready -> read(cmd) if state == "STATE1": if cmd == "CMD1": state = "STATE2" else: invalid_command() elif state == "STATE2": if cmd == "CMD2": state = "STATE1" else: invalid_command()
      
      





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



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



stackless


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



рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдЯрд╛рд╕реНрдХрд▓реЗрдЯ (рд╕реНрдЯреИрдХрд▓реЗрд╕ рд╢рд░реНрддреЛрдВ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реНрд▓реЛ) рдмрдирд╛рдирд╛ рдПрдХ рдирдпрд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдереНрд░реЗрдб рдмрдирд╛рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ: рд╕реНрдЯреИрдХрд▓реЗрд╕.tasklet (your_func) (1, 2, 3)ред рд╣рдо рдирдП рдЯрд╛рд╕реНрдХрд▓реЗрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди your_func (1, 2, 3) рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рддрдм рддрдХ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЯрд╛рд╕реНрдХрд▓реЗрдЯ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░реНрдиреЗрд▓ (рд╕реНрдЯреИрдХреНрд▓реЗрд╕.рд╕реНрдХреНрд░реВрдЗрдб ()) рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдЕрд╡рд░реБрджреНрдз рд╣реИ, рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯрд╛рд╕реНрдХрд▓реЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд╕рдордп, рдЯрд╛рд╕реНрдХрд▓реЗрдЯ I / O рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрддрд╛рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдмрджрд▓реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рдЯрд╛рд╕реНрдХрд▓реЗрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЕрдкреЗрдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдЖрдПрдЧрд╛, рддреЛ рдкрд╣рд▓рд╛ рдЯрд╛рд╕реНрдХрд▓реЗрдЯ рдирд┐рдпрдВрддреНрд░рдг рд▓реЗрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред



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



 val = memcached.get("some-object-123") if val is None: res = list(mysql.query("select val from tbl where id=%d", 123)) if len(res): val = res[0] memcached.set("some-object-123", val)
      
      





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



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



 def get(): if len(self._pool): return self._pool.pop(0) else: return self._wait_channel.receive()
      
      





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



 def put(conn): if self._wait_channel.balance < 0: self._wait_channel.send(conn) else: self._pool.append(conn)
      
      





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



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



рд╕рдиреНрдирд┐рдкрддрди


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



рд╕рдорд╡рд░реНрддреА рдХрд╛рдореЗрдЪреНрдЫрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рд▓реВрдк рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрдлрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реА рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реЙрдХреЗрдЯ рдореИрдиреЗрдЬрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЙрдиреНрд╕реБрд░реЗрдВрд╕, рдЯрд╛рдЗрдорд░ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдиреАрдВрдж (рдУрдВ) рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (HTTP рдХреНрд▓рд╛рдЗрдВрдЯ, HTTP рд╕рд░реНрд╡рд░ (WSGI)), рдореЗрдореНрдХреЗрдЪреНрдб, MySQL - рд╣рд╛рдБ, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ MySQL рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред , XMPP)ред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг (рдореЗрдореНрдХреЗрдб рдФрд░ MySQL рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде) рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Concurrence рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдиреНрдпреВрдирддрдо рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:



 def hello_world(environ, start_response): start_response("200 OK", []) return ["<html>Hello, world!</html>"] def main(): server = WSGIServer(hello_world) server.serve(('localhost', 8000)) dispatch(main)
      
      





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



рдЕрдм рдорд░рд╣рдо рдореЗрдВ рдПрдХ рдордХреНрдЦреАред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдкреН рдд рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдЦрдХ рдкрддреНрд░реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╣реА SMTP рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдереНрд░рд┐рдлреНрдЯ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде WebDAV рдХреЗ HTTP PUT рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬреЛ рдХрд┐ рдореБрдЭреЗ рдорд┐рд▓реА рдмрдЧреНрд╕ рдХреЗ рд╕рд╛рде, рдФрд░ рдЬреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд┐рд▓реА рд╣реИрдВ, рдЙрдирдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡рд░реНрдЬрд╝рди рдСрдлрд╝ рдХреЙрдиреНрд╕рд░реНрдЯ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реАред рднрдВрдбрд╛рд░ рдЧрд┐рддреБрдм рдкрд░ рд╣реИ ред



Stackless, Concurrence, рдпрд╛ рдЕрдиреНрдп Python рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ ru-python-async рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рд╕рдВрджрд░реНрдн


рд╕реНрдЯреИрдХрд▓реЗрд╕ рдкрд╛рдпрдерди - www.stackless.com

рд╕рдлрд▓рддрд╛ рдХреА рдХрд╣рд╛рдирд┐рдпрд╛рдВ - www.stackless.com/wiki/Applications

рд╕рдорд╕рд╛рдордпрд┐рдХреА - рд╕рд▓рд╛рдореА рд╕реНрд░реЛрдд .hyves.org/ concurrence

рдореЗрд░рд╛ рд╕рдорд╛рдЧрдо рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг github.com/JoyTeam/concurrence рд╣реИ



All Articles