рдмрд╡рдВрдбрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдкрд░рдд рдЖрд╡реЗрджрди



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

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

рдЖрд╡реЗрджрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг


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

WebSockets


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

рдЖрдзрд╛рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди


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

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз


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

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

 class MainHandler(BaseHandler): @tornado.web.asynchronous def get(self): self.db.execute('SELECT 4, 8, 15, 16, 23, 42;', callback=self._on_response) def _on_response(self, cursor): self.write('Query results: %s' % cursor.fetchall()) self.finish() 


рд╕реБрд░рдХреНрд╖рд┐рдд рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ


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

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

  1. рдмрд╡рдВрдбрд░ / .web.asynchronous рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреНрд░рд╛рдкреНрдд / рдкреЛрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбрд┐рдХреЛрдб рдХрд░реЗрдВ
  2. рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ
  3. рдЕрдиреБрд░реЛрдз рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдереНрд░реЗрдб рдЪрд▓рд╛рдПрдБ
  4. рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рдордп рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рддрд╛рд▓реЗ рд▓рдЧрд╛рдХрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдХрд╛рдо рдХрд░реЗрдВ
  5. рдХреЙрд▓рдмреИрдХ рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдВрддрд┐рдо _finish () рдмрдирд╛ рджреЗрдЧрд╛ред

рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдЫреЛрдЯрд╛ рдорд┐рдХреНрд╕рд┐рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 class ThreadableMixin: def start_worker(self): threading.Thread(target=self.worker).start() def worker(self): try: self._worker() except tornado.web.HTTPError, e: self.set_status(e.status_code) except: logging.error("_worker problem", exc_info=True) self.set_status(500) tornado.ioloop.IOLoop.instance().add_callback(self.async_callback(self.results)) def results(self): if self.get_status()!=200: self.send_error(self.get_status()) return if hasattr(self, 'res'): self.finish(self.res) return if hasattr(self, 'redir'): self.redirect(self.redir) return self.send_error(500) 


рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реБрд░рдХреНрд╖рд┐рдд рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 class Handler(tornado.web.RequestHandler, ThreadableMixin): def _worker(self): self.res = self.render_string("template.html", title = _("Title"), data = self.application.db.query("select ... where object_id=%s", self.object_id) ) @tornado.web.asynchronous def get(self, object_id): self.object_id = object_id self.start_worker() 


рдпрджрд┐ рд╣рдореЗрдВ рдПрдХ рдЕрдиреБрдкреНрд░реЗрд╖рд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ _worker () рдореЗрдВ рд╣рдо рд╡рд╛рдВрдЫрд┐рдд url рдХреЗ рд▓рд┐рдП рд╡реИрд░рд┐рдПрдмрд▓ self.redir рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП json рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ self.res рдореЗрдВ, рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред

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

рдмреИрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ


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

рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдмреИрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдорд╛рдирдХ рдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ рд╣рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдорд╛рдпрд╛рд╡реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓рддреА рд╣реИрдВред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдмрд╡рдВрдбрд░ ioloop.PeriodicCallback рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рдЯрд╛рдЗрдорд░ рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдФрд░ рддрдВрддреНрд░рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред

рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдЕрдзрд┐рдХ


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдпреБрдХреНрддрд┐рдпрд╛рдВ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╢рд╛рдЦрд╛ рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

  1. рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд┐рдд рдмрд╡рдВрдбрд░ рд╕реНрдЯрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЯреЙрд░реНрдиреЗрдбреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХреИрд╕реЗ рдмрд╛рдВрдзрдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред
  2. рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рднреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреИрд╢ред рднреВрд▓ рдЬрд╛рдУ рдФрд░ рд╕рд╣ред рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЪрд▓реЗрдЧрд╛ред рд╕рд░реНрд╡рд░ рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрдбрд╝реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреИрд╢рд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
  3. рдпрджрд┐ рдкреЗрдЬ рдкреАрдврд╝реА рдХрд╛ рд╕рдордп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХреА рд╕реАрдорд╛ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рд╕реНрдердЧрд┐рдд рдХрд░реЗрдВ
  4. рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдмрд╡рдВрдбрд░ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП nginxред рдЖрдк рдмрд╕ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ FreeBSD / amd64 рдФрд░ nginx рдХреЗ рд╕рд╛рде i7 / 16Gb / SAS рд╕рд░реНрд╡рд░ рдХреНрдпрд╛ рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рд╕реМрдВрдкрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рд╕рд┐рд░реНрдл рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рддреЗрдЬ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред


рдкрд░рд┐рдгрд╛рдо


рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, 5000 рдПрдХ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдЬреЛ рд╕рд╛рдЗрдЯ рдкрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЦреЗрд▓ рд░рд╣реЗ рд╣реИрдВ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╣рдЬрд╛рд░реЛрдВ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рдВрджреЗрд╢) рд╕рд░реНрд╡рд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЦреАрдВрдЪрддрд╛ рд╣реИ (рдПрд▓рдП ~ = 0.2, рд╕рд░реНрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ 8 рдЬреАрдмреА рдореБрдХреНрдд рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ 400 рдПрдордмреАрдмреА рдореЗрдореЛрд░реА рдЦрд╛рддреА рд╣реИ)ред 150 рдЕрд╕рд▓реА рдЦрд┐рд▓рд╛рдбрд╝реА рдСрдирд▓рд╛рдЗрди, рдордЬреЗрджрд╛рд░ рд▓реЗрдЦрди рдЧреЛрд▓рд┐рдпрд╛рдВ, рд╕рд░реНрд╡рд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рд╢реВрдиреНрдп рд▓реЛрдб рдФрд░ рдмрд┐рдЬрд▓реА рдХреА рднрд╛рд░реА рдЖрдкреВрд░реНрддрд┐)ред

рдореЛрд░реНрдЪреЗ рдкрд░, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдФрд░ рдмрд▓ рдЖрдкрдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!

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


All Articles