Gunicorn: POST рд▓реМрдЯрдиреЗ рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ> Heroku рдкрд░ 13k рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдЕрдЧре░ 2014  ┬╖  34рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рдирдорд╕реНрддреЗ, рд╣рдордиреЗ рдлреНрд▓рд╛рд╕реНрдХ + рдЧрдирд┐рдХреЛрд░реНрди + рд╣реЗрд░реЛрдХреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░рд╛ рдФрд░ рдХреЛрдИ рдХрд╛рд░рдг рдпрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред

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

рд╣рдордиреЗ рдЙрд╕ рдЕрд╕рдлрд▓ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд▓рдЧрднрдЧ 13k рдЕрдВрдХ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░ рджреЗрддреЗред рдЕрдЧрд░ рд╣рдо 13k рд╕реЗ рдХрдо рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░реЗрдЧреАред рдЕрдЧрд░ рд╣рдо 13k рд╕реЗ рдЕрдзрд┐рдХ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред

рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб https://github.com/erjiang/gunicorn-issue рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ - рдмрд╕ рд░реЗрдкреЛ рдХреЛ рд╣реЗрд░реЛрдХреВ рдореЗрдВ рддреИрдирд╛рдд рдХрд░реЗрдВ рдФрд░ рд░реАрдбрдореЗ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

( Feedback Requested unconfirmed help wanted - Bugs -

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ https://github.com/erjiang/gunicorn-issue рдкрд░ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ (рдЬреЛ рдЧрдирд┐рдХреЛрд░реНрди 19.9.0, рдкрд╛рдпрдерди 2.7.14, рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░, --workers 4 )ред рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди рдХреА рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдпрд╣ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдПрдХ HTTP 200 рд▓реМрдЯрд╛рдпрд╛ рд╣реИред

Python 3.7.3 + gunicorn master рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рдФрд░ --workers 1 рдХреЛ рдХрдо рдХрд░рдиреЗ рд╕реЗ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рд╕реЗ gevent рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХрдо рдмрд╛рд░ рд╣реЛрддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╣реБрдИ)ред --log-level debug рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рджрд┐рдЦрд╛ (рдЕрдиреБрд░реЛрдз рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЙрдЯрдкреБрдЯ [DEBUG] POST /test1 рд▓рд╛рдЗрди рдерд╛)ред

рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА --spew , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдм рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рдореИрдВ рдПрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ time.sleep(1) рд╕реЗ рдкрд╣рд▓реЗ resp.close() рдпрд╣рд╛рдБ рдЬреЛ рдЗрд╕реА рддрд░рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░реЛрдХрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдмрдлрд░ close() рд╕рдордп рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЦреЛ рд╕рдХрддреА рд╣реИ:

рдиреЛрдЯ: close() рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд░рд┐рд▓реАрдЬ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рддреБрд░рдВрдд рдмрдВрдж рд╣реЛ рдЬрд╛рдПред рдпрджрд┐ рдЖрдк рд╕рдордп рдкрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ shutdown() рд╕реЗ рдкрд╣рд▓реЗ close() shutdown() рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред

(рджреЗрдЦреЗрдВ https://docs.python.org/3/library/socket.html#socket.socket.close)

рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ sock.shutdown(socket.SHUT_RDWR) ( рдбреЙрдХреНрд╕ ) рд╕реЗ рдкрд╣рд▓реЗ sock.close() рдпрд╣рд╛рдБ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдпрдж SO_LINGER рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдкрдврд╝рд╛ рд╣реИ рдЙрд╕рд╕реЗ рдЯреНрд░реЗрдб-рдСрдл рд╣реИред

рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдбреЙрдХреНрд╕ рдорд┐рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛:
https://stackoverflow.com/questions/8874021/close-socket-directly-after-send-unsafe
https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable

рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗ :-)

рд╕рднреА 34 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд░рд┐рдкреЛрд░реНрдЯ, рдзрдиреНрдпрд╡рд╛рдж @erjiangред

рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрд╕рдХрд╛реЛрдХреВ рдЦрд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдРрд╕реЗ рдЦрд╛рддреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ? cc @tilgovi @kennethreitz

рдЦреБрд╢реА рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред

рдПрдХ рддреНрд╡рд░рд┐рдд рд╡рд┐рд╡реЗрдХ рдЬрд╛рдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдФрд░ рд╡реЗрдЯреНрд░реЗрд╕ рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА:

  • [x] рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рд╕рдорд╛рди
  • [x] рд╢рд░реАрд░ рдХреА рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реА
  • [x] рд╕рдорд╛рди рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (рдХреЛрдИ рднреА рдЦрдВрдбрд┐рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)

рдЖрдЧреЗ рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЯреАрд╕реАрдкреА рд╕реНрддрд░ рдкрд░ рдорддрднреЗрдж рд╣реИрдВред рдореИрдВ рдЙрдиреНрд╣реЗрдВ tcpdump рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдПрдХ рд╣реА рдХрд░реНрд▓ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рднреА рдЧрдирд┐рдХреЛрд░реНрди рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реЗрдЯреНрд░реЗрд╕ рдЗрд╕реЗ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИред рдЗрд╕рдХрд╛ рдЕрднреА рддрдХ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ _only_ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдЬреЛ рдЕрд▓рдЧ рдерд╛ред

@tilgovi рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡реЗрдЯреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдЙрд╕реЗ рдереНрд░реЗрдбреЗрдб рд╡рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА рдЗрд╕рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

рдирдорд╕реНрддреЗ,
рдореИрдВ рднреА рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпрд╛ рдЖрдк рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛?
@tilgovi @erjiang @benoitc

рдЪрд┐рдпрд░реНрд╕
рдХрд╣рд╛рд╡рдд

@maximkgn рдХреНрдпрд╛ рдЖрдк рднреА рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреЛрдИ рдФрд░ рд╡рд┐рд╡рд░рдг?

рдореИрдВ django 1.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреЛрд╕реНрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереА рдЬреЛ рд╣рдореЗрд╢рд╛ 13k рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рдереА, рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде ~ 0.5 рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ 13k рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рддрдХ рдЫреЛрдЯрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд░реЛрдХреВ рд▓реЙрдЧ рдореЗрдВ рд╣рдордиреЗ рд╡рд╣реА h18 рддреНрд░реБрдЯрд┐ рджреЗрдЦреА, рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдЬрдЧрд░ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдпрд╣ рд╣рд░реЛрдХреВ рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдЬрдЧрд░ рдХреЗ рдмреАрдЪ рдЧрдирд┐рдХреЛрд░реНрди рдкрд░рдд рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
рдЬрдм рд╣рдордиреЗ рд╡реЗрдЯреНрд░реЗрд╕/рдпреВрдбрдмреНрд▓реНрдпреВрдПрд╕рдЬреАрдЖрдИ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рддреЛ рдмрдЧ рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛..

@maximkgn рдпрджрд┐ рдЖрдк --threads рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдХреЛрдИ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ?

рдореБрдЭреЗ рдлреНрд▓рд╛рд╕реНрдХ рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди (рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг 19.3 рдФрд░ 19.4.5) рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред @benoitc рдореИрдВрдиреЗ 1, 2, рдФрд░ 4 рдзрд╛рдЧреЗ (--рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде) рд╡рд┐рдХрд▓реНрдк рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

@cbaines рдЕрдиреБрд░реЛрдз рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рдлреНрд░реЗрдВрдбрдкреЗрд╕реНрдЯ 1M рд╕реЗ рдЕрдзрд┐рдХ рдкреЛрд╕реНрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ .... рдЗрд╕рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред

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

рдлреНрд▓рд╛рд╕реНрдХ 1.0.2 рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди 19.9.0 рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЗрд░реЛрдХреВ рдореЗрдВ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдорд░реНрдкрд┐рдд рдкрд╛рдпрдерди рд▓реЛрдЧ рд╣реИрдВред

рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://github.com/erjiang/gunicorn-issue/

рдореБрдЭреЗ рдпрд╣ H18 рддреНрд░реБрдЯрд┐ рдПрдХ рдмрдбрд╝реЗ GET рдЕрдиреБрд░реЛрдз рдкрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд░рд╣реА рд╣реИред

рд╡реЗрдЯреНрд░реЗрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИред рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди рдЗрд╕рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣реА рд╕рдЯреАрдХ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп 21.54 KB . рд╣реИ

рдлреНрд▓рд╛рд╕реНрдХ 1.0.2 рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди 19.9.0 рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЗрд░реЛрдХреВ рдореЗрдВ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдорд░реНрдкрд┐рдд рдкрд╛рдпрдерди рд▓реЛрдЧ рд╣реИрдВред

рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://github.com/erjiang/gunicorn-issue/

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

@benoitc рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @erjiang рдиреЗ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдмреИрдХ рдЕрдк рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЧрдпрд╛ред рдореИрдВ рд╕реНрд╡-рдЕрд╕рд╛рдЗрди рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЬрдм рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддрдм рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдВрдЧрд╛ред

рдлреНрд▓рд╛рд╕реНрдХ 1.0.2 рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди 19.9.0 рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЗрд░реЛрдХреВ рдореЗрдВ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдорд░реНрдкрд┐рдд рдкрд╛рдпрдерди рд▓реЛрдЧ рд╣реИрдВред
рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://github.com/erjiang/gunicorn-issue/

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

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЙрд╕рдХреЗреЛрдХреВ рд╕реЗ рдЬрд╡рд╛рдм рдорд┐рд▓рд╛?

рдореИрдВ https://github.com/erjiang/gunicorn-issue рдкрд░ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ (рдЬреЛ рдЧрдирд┐рдХреЛрд░реНрди 19.9.0, рдкрд╛рдпрдерди 2.7.14, рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░, --workers 4 )ред рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди рдХреА рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдпрд╣ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдПрдХ HTTP 200 рд▓реМрдЯрд╛рдпрд╛ рд╣реИред

Python 3.7.3 + gunicorn master рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рдФрд░ --workers 1 рдХреЛ рдХрдо рдХрд░рдиреЗ рд╕реЗ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рд╕реЗ gevent рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХрдо рдмрд╛рд░ рд╣реЛрддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╣реБрдИ)ред --log-level debug рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рджрд┐рдЦрд╛ (рдЕрдиреБрд░реЛрдз рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЙрдЯрдкреБрдЯ [DEBUG] POST /test1 рд▓рд╛рдЗрди рдерд╛)ред

рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА --spew , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдм рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рдореИрдВ рдПрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ time.sleep(1) рд╕реЗ рдкрд╣рд▓реЗ resp.close() рдпрд╣рд╛рдБ рдЬреЛ рдЗрд╕реА рддрд░рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░реЛрдХрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдмрдлрд░ close() рд╕рдордп рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЦреЛ рд╕рдХрддреА рд╣реИ:

рдиреЛрдЯ: close() рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд░рд┐рд▓реАрдЬ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рддреБрд░рдВрдд рдмрдВрдж рд╣реЛ рдЬрд╛рдПред рдпрджрд┐ рдЖрдк рд╕рдордп рдкрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ shutdown() рд╕реЗ рдкрд╣рд▓реЗ close() shutdown() рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред

(рджреЗрдЦреЗрдВ https://docs.python.org/3/library/socket.html#socket.socket.close)

рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ sock.shutdown(socket.SHUT_RDWR) ( рдбреЙрдХреНрд╕ ) рд╕реЗ рдкрд╣рд▓реЗ sock.close() рдпрд╣рд╛рдБ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдпрдж SO_LINGER рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдкрдврд╝рд╛ рд╣реИ рдЙрд╕рд╕реЗ рдЯреНрд░реЗрдб-рдСрдл рд╣реИред

рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдбреЙрдХреНрд╕ рдорд┐рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛:
https://stackoverflow.com/questions/8874021/close-socket-directly-after-send-unsafe
https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable

рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗ :-)

рдкреВрд░реНрдг рдПрд╕рдЯреАрдЖрд░:

  1. https://signup.heroku.com . рдкрд░ рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рд╣рд░реЛрдХреВ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ
  2. рд╣реЗрд░реЛрдХреВ рд╕реАрдПрд▓рдЖрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рджреЗрдЦреЗрдВ https://devcenter.heroku.com/articles/heroku-cli)
  3. heroku login рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдПрд▓рдЖрдИ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ
  4. git clone https://github.com/erjiang/gunicorn-issue && cd gunicorn-issue
  5. heroku create (рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рд╣реЗрд░реЛрдХреВ рдРрдк рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ heroku рдирд╛рдордХ рдЧрд┐рдЯ рд░рд┐рдореЛрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ)
  6. git push heroku master
  7. curl --data "foo=bar" https://YOUR_GENERATED_APP_NAME.herokuapp.com/test1 (рд╕рдордп рдХрд╛ 75% рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ)
  8. рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдРрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП heroku destroy рдЪрд▓рд╛рдПрдВред

@tilgovi рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ @edmorley рдиреЗ рдЧрд▓рдд рдХреНрдпрд╛ рд╣реИ рдЗрд╕рдХреА рдПрдХ sock.shutdown() рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рднреА рдЬрдорд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдлрд┐рдХреНрд╕ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╣реИрд▓реЛ, рдореИрдВрдиреЗ 503 рдХреЗрдмреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдорд╛рд░рд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛ JSON рд╕рд░рдгреА рд╣реИред
рдордирд╛рдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ:

  1. рдореБрдЭреЗ рдЫреЛрдЯрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ http рдХреНрд▓рд╛рдЗрдВрдЯ (рдХреНрд░реЛрдо, рдХрд░реНрд▓) рдЕрднреА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
  2. ~75% рдЕрдиреБрд░реЛрдз 120-130 рд╕реЗрдХрдВрдб рдХреЗ рдмреАрдЪ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддреЗ рд╣реИрдВред рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз 400 рдПрдордПрд╕ рдХреЗ рддрд╣рдд рд╣рд▓ рд╣реЛрддреЗ рд╣реИрдВред
  3. рдЫреЛрдЯреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рддреЗрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВред

рдпрд╣ рджреЛрдиреЛрдВ рдкрд░ рдпреЛрдЧреНрдп рд╣реИ:

  1. рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рд╕реНрдерд╛рдиреАрдп рдбреЙрдХрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди
  2. рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрд╕реАрдПрд╕ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдбреЛрдХрд░ рдХрдВрдЯреЗрдирд░

рд░рдирдЯрд╛рдЗрдо рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрдЕрдк
рдореАрдирд╣реЗрд▓реНрдб-рдЧрдирд┐рдХреЛрд░реНрди-рдбреЙрдХрд░ рдЗрдореЗрдЬ рдХреЛ _python3.6_ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдпрдерди 3.6.7, рдлреНрд▓рд╛рд╕реНрдХ 1.0.2, рдлреНрд▓рд╛рд╕реНрдХ-рд░реЗрд╕реНрдЯрдкреНрд▓рд╕ 0.12.1, рд╕рд┐рдореНрдкреЗ рдлреНрд▓рд╛рд╕реНрдХ-рдХреИрд╢рд┐рдВрдЧ рд╣реИред

рдбреЙрдХрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди : 3 рд╕реАрдкреАрдпреВ, рд░реИрдо 1024 рдПрдордмреА

Gunicorn рд╡рд┐рдиреНрдпрд╛рд╕ :

https://github.com/benoitc/gunicorn/issues/2015 рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдореАрдирд╣реЗрд▓реНрдб рд╡рд░реНрдХрд░ рдХреЗ рд▓рдЯрдХрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдереА, рдФрд░ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред @stapetro рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ?

рдирдорд╕реНрддреЗ @jamadden ,
рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред рджреЛрдиреЛрдВ _gevent_ рдФрд░ _gthread_ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдореАрдирд╣реЗрд▓реНрдб рд╕реЗ рджреВрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! :)

рдкреВрд░реНрдг рдПрд╕рдЯреАрдЖрд░:

  1. https://signup.heroku.com . рдкрд░ рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рд╣рд░реЛрдХреВ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ
  2. рд╣реЗрд░реЛрдХреВ рд╕реАрдПрд▓рдЖрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рджреЗрдЦреЗрдВ https://devcenter.heroku.com/articles/heroku-cli)
  3. heroku login рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдПрд▓рдЖрдИ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ
  4. git clone https://github.com/erjiang/gunicorn-issue && cd gunicorn-issue
  5. heroku create (рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рд╣реЗрд░реЛрдХреВ рдРрдк рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ heroku рдирд╛рдордХ рдЧрд┐рдЯ рд░рд┐рдореЛрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ)
  6. git push heroku master
  7. curl --data "foo=bar" https://YOUR_GENERATED_APP_NAME.herokuapp.com/test1 (рд╕рдордп рдХрд╛ 75% рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ)
  8. рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдРрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП heroku destroy рдЪрд▓рд╛рдПрдВред

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

@ рдорд┐рдХреЗрд▓рд╣рди рдпрд╕ ред рдлреНрд▓рд╛рд╕реНрдХ/рдлреНрд▓рд╛рд╕реНрдХ рд░реЗрд╕реНрдЯрдкреНрд▓рд╕ рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд╕рд╛рде рдПрдХ рдРрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ: POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╕реЗ 503 рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ [рдпрджрд┐ рдкреЗрд▓реЛрдб> 13k], рдЬрдмрдХрд┐ рддреНрд░реБрдЯрд┐ рддрдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм рдРрдк рдЬреАрдИрдЯреА рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдХреЛрдб!
рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдЯреНрд░реЗрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реА рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╣рд╛рде рд╕реЗ" Gunicorn рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ ...

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

рдпрджрд┐, рдЬреИрд╕рд╛ рдХрд┐ @erijang рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ, рд╣рд░реЛрдХреВ Gunicorn рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬрдм Gunicorn рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ: рдЬреЛ Gunicorn рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рдФрд░ рдЙрдиреНрд╣реЗрдВ Heroku рдкрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ)?
AFAIK, рдХрдИ рдЧреНрд░рд╛рд╣рдХ рд╣рд░реЛрдХреВ рдХреЛ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдЪреБрдирддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ...: |

@RinaldoNani рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рд╕рд╛рде рд╣реА рд╣рдо рдХрд┐рд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? .

@benoitc рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://github.com/benoitc/gunicorn/issues/840#issuecomment -рекреореирекрепрезреиремрен

рд╣рд╛рдп @benoitcред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдордиреЗ рдкрд╛рдЗрдерди/рдлреНрд▓рд╛рд╕реНрдХ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╣реЗрд░реЛрдХреВ рдХреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рджреЗрдЦрднрд╛рд▓ рдХреЗ рд╕рд╛рде рд╣реЗрд░реЛрдХреВ рдкрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдлреНрд▓рд╛рд╕реНрдХ/рдлреНрд▓рд╛рд╕реНрдХрд░реЗрд╕реНрдЯрдкреНрд▓рд╕ рдРрдк рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ (рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЧрдирд┐рдХреЛрд░реНрди рд╕рд┐рдВрдХ "рд╡реЗрдм" рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ )ред

рд╣рдорд╛рд░реЗ рдРрдк рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕ рдереНрд░реЗрдб рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдРрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ 20k+ JSON рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдЬрдм рдРрдк рдХреЛ рд╣реЗрд░реЛрдХреВ рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ 503 рддреНрд░реБрдЯрд┐ рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ: рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рдЪрдореБрдЪ рдХреЛрдИ рдЯреНрд░реИрдлрд╝рд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рднреА рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдиреЗ рдмрддрд╛рдпрд╛, рд▓реЙрдЧ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ HTTP рд╕реНрддрд░ рдкрд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ (200 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИ)ред
рдпрджрд┐ рдкреЗрд▓реЛрдб 13k рд╕реЗ рдХрдо рд╣реИ, рддреЛ Heroku/Gunicorn рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ POST рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред
рд╣рдордиреЗ POST (?!?) рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп GET рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ @mikkelhn рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ (рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ) рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред

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

@RinaldoNani рдЕрдВрдзреЗрд░реЗ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░ рджреА ... рдХрд╣реАрдВ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╕рднреА request.data рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

@route('/whatever', methods=['POST'])
def whatever_handler():
    str(request.data)
    return flask.jsonify(...)

рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдЖрдкрдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ?

рдореИрдВ рдЗрд╕реЗ 2 рд╕рдкреНрддрд╛рд╣ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ H18 рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде 1:00 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ (рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)ред

рдореИрдВ рд╡рд┐рд╢рд╛рд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкреНрд▓реЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 18K рд╕реЗ 20K рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реВрдВред H18 рдПрдХ рдмрд╣реБрдд рд╣реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛ред рдпрд╣ рдХрднреА-рдХрднреА рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ "рд╕рд╛рдордЧреНрд░реА-рд╢реАрд░реНрд╖рд▓реЗрдЦ рд▓рдВрдмрд╛рдИ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛" рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд▓рдЧрднрдЧ рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ 2 рдЪреАрдЬреЗрдВ рдЖрдЬрдорд╛рдИрдВ рдЬреЛ рдЖрдЦрд┐рд░рдХрд╛рд░ рдХрд╛рдо рдХрд░ рдЧрдИрдВ:

  1. POST рдЕрдиреБрд░реЛрдз рдХреЛ GET рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред
  2. рдореЗрд░реЗ рдбреЗрдЯрд╛ рдореЗрдВ NaN / Null рдорд╛рди рдереЗ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдореЙрдбрд▓ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛)
    рдЗрд╕рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рдиреА рдмрдВрдж рд╣реЛ рдЧрдИред
    рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ!
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

alep picture alep  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Abraxos picture Abraxos  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ttcqaq picture ttcqaq  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gr790 picture gr790  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mw44118 picture mw44118  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ