Gunicorn: websockets рдХреЗ рд╕рд╛рде wsgi.py рдореЗрдВ 'рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ 'status_code' рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдлрд╝рд░ре░ 2016  ┬╖  36рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рдореИрдВ рдЕрдкрдирд╛ рдРрдк рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ

gunicorn --worker-class eventlet -w 1 server:app --bind="127.0.0.1:5000"

рдФрд░ websockets рдХреЗ рд▓рд┐рдП Flack-SocketIO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ Gunicorn рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдареАрдХ рд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ

[2016-01-30 10:20:53 -0800] [7330] [ERROR] Error handling request
Traceback (most recent call last):
  File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/workers/async.py", line 52, in handle
    self.handle_request(listener_name, req, client, addr)
  File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/workers/async.py", line 114, in handle_request
    resp.close()
  File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 423, in close
    self.send_headers()
  File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 316, in send_headers
    tosend = self.default_headers()
  File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 297, in default_headers
    elif self.should_close():
  File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 230, in should_close
    if self.status_code < 200 or self.status_code in (204, 304):
AttributeError: 'Response' object has no attribute 'status_code'

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдХреЛрдИ рд╕рд▓рд╛рд╣ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ?

Feedback Requested Discussion Investigation help wanted

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

@ kramer65 рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБред рдореИрдВ рд╕рджрд┐рдпреЛрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ! рдзрдиреНрдпрд╡рд╛рдж!

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

@ bclark8923 рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдБ! рддреБрдо рдореБрдЭрд╕реЗ рдХреНрдпрд╛ рдХрд░рд╡рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реЛ?

рд╕реЛрдорд╡рд╛рд░, реирео рдорд╛рд░реНрдЪ реирежрезрем рдХреЛ, рдмреЗрдиреЛрдЗрдЯ рдЪреЗрд╕рдиреЗрдЙ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@bclark8923 https://github.com/bclark8923 рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЖрд╡реЗрджрди рд╣реИ
рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1210#issuecomment -202484667

рдзрдиреНрдпрд╡рд╛рдж,
рдмреНрд░рд╛рдпрди рдХреНрд▓рд╛рд░реНрдХ
(реирекрео) репрепреж релремрезрем
www.hdphealth.com

рдореБрдЭреЗ рдлреЗрд╕рдмреБрдХ https://facebook.com/bclark8923 рдФрд░ Twitter рдкрд░ рдЬрд╛рдиреЗрдВ
https://twitter.com/blaurenceclark!

@ bclark8923 рдЕрдЧрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдЕрдВрддрддрдГ рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдорджрдж рдХрд░реЗрдЧрд╛ :)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЬреА рдмреЛрд▓рд┐рдпреЗ! рдореБрдЭреЗ рдИрдореЗрд▓ рдХрд░реЗрдВ [email protected] рдФрд░ 19.x рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЬрд▓реНрдж рд╣реА

рд╕реЛрдорд╡рд╛рд░, реирео рдорд╛рд░реНрдЪ реирежрезрем рдХреЛ, рдмреЗрдиреЛрдЗрдЯ рдЪреЗрд╕рдиреЗрдЙ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@bclark8923 https://github.com/bclark8923 рдЕрдЧрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ
рдЕрдВрддрддрдГ рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдорджрдж рдХрд░реЗрдЧрд╛ :)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1210#issuecomment -реирежреирекрепреирежрежрел

рдзрдиреНрдпрд╡рд╛рдж,
рдмреНрд░рд╛рдпрди рдХреНрд▓рд╛рд░реНрдХ
(реирекрео) репрепреж релремрезрем
www.hdphealth.com

рдореБрдЭреЗ рдлреЗрд╕рдмреБрдХ https://facebook.com/bclark8923 рдФрд░ Twitter рдкрд░ рдЬрд╛рдиреЗрдВ
https://twitter.com/blaurenceclark!

рд╕рдВрд╕реНрдХрд░рдг 19.4.5 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдореИрдВ рдЧрдирд┐рдХреЛрд░реНрди рд╕рдВрд╕реНрдХрд░рдг 18.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреЛрдИ рдлрд┐рдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ?

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдб рдХреЛрдб рд╣реИ рддреЛ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА :)

@benoitc - рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ .. ;-)

рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреБрдЫ рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛!

@benoitc - рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рддрдп рдХрд┐рдпрд╛ред

рдЖрдк рдпрд╣рд╛рдВ рд░реАрдбрдореА рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд░реЗрдкреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/kramer65/gunicorn-error

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рдореИрдВ рдЧрдирд┐рдХреЛрд░реНрди рд╕рдВрд╕реНрдХрд░рдг 18.0 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рд╕рдВрднрд╡рдд: рдХреБрдЫ рдХреЛ gunicorn.workers.async.ALREADY_HANDLED рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЬреИрд╕реЗ рд╣реА рдЖрд╡реЗрджрди рдЕрдкрдиреЗ рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ, рдЧрдирд┐рдХреЛрд░реНрди рдЕрдиреБрд░реЛрдз рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, Gunicorn рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

"рдЙрджрд╛рд╣рд░рдг/рд╡реЗрдмрд╕реЛрдХреЗрдЯ" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдЙрдирдХреЗ рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

@benoitc - рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

@ kramer65 рд╣рд╛рдБ рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ред

рддреЛ Gunicorn рдПрдХ рд╢реБрджреНрдз WSGI рдЗрдВрдЬрди рд╣реИ рдФрд░ рдПрдХ WSGI рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ:
https://github.com/benoitc/gunicorn/blob/master/gunicorn/http/wsgi.py#L242

(рдЗрд╕ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/async.py#L103-L119)

рдЬреИрд╕рд╛ рдХрд┐ @tilgovi рдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк ALREADY_HANDLED . рд▓реМрдЯрд╛рдХрд░ рдЧрдирд┐рдХреЛрд░реНрди рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрди рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВрдиреЗ рдлреНрд▓реИрд╢ рд╕реЙрдХреЗрдЯрд┐рдпреЛ рдХрд╛ рдХреЛрдб рдкрдврд╝рд╛ рд╣реИ, рдпрд╣ рдлреНрд▓рд╛рд╕реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ socketio.Middleware рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ engineio.middleware.Middleware рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/middleware.py

рдЬреЛ рдкрде рдорд┐рд▓рдиреЗ рдкрд░ wsgi рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/middleware.py#L45 -L52

рддреЛ рдпрд╣ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдкрде рдкрд░ socketio.Server.handle_request рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
https://github.com/miguelgrinberg/Flask-SocketIO/blob/master/flask_socketio/__init__.py#L144

рдЬреЛ рд╕реНрд╡рдпрдВ engineio.Server.handle_request рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд░рд┐рдкрддреНрд░ рд╡рд┐рд╡рд░рдг ...):
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L184

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рди рддреЛ socket.handle_get_request рдпрд╛ socket. handle_post_request рдиреЗ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИ:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/socket.py#L69 -L96

рдФрд░ рдлрд┐рд░ рдпрд╣рд╛рдБ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L251 -L252

рдЪреВрдВрдХрд┐ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдпрд╛ рдХреБрдЫ рднреА рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдкрдЧреНрд░реЗрдб рдЙрд╕реА рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ:
https://github.com/benoitc/gunicorn/blob/master/examples/websocket/websocket.py

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдВрддрд┐рдо r рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L251 -L252

рдЗрд╕реЗ рд╢рд╛рдпрдж рд╡рд╣рд╛рдВ рдХреА рддрд░рд╣ ALREADY_HANDLED рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
https://github.com/benoitc/gunicorn/blob/master/examples/websocket/websocket.py#L115

рд╡реИрд╕реЗ рднреА рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред

@ kramer65 рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рдЗрд╕ рдЯрд┐рдХрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ :)

@benoitc ALREADY_HANDLED рд╕реНрдерд┐рд░рд╛рдВрдХ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдЗрд╡реЗрдВрдЯрд▓реЗрдЯ рдХрд╛ рдЗрд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/eventlet/eventlet/blob/2cd5f1d9aea53efb4526e7185017bdcc84732588/eventlet/wsgi.py#L69ред

рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рдЬрд┐рд╕ r рдорд╛рди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣реЗ рдереЗ, рд╡рд╣ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдИрд╡рдирд▓реЗрдЯ рдХрд╛ ALREADY_HANDLED рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЗрд╡реЗрдВрдЯрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: https://github.com/eventlet/eventlet/blob/2cd5f1d9aea53efb4526e7185017bdcc84732588/eventlet/websocket.py#L135ред

Gunicorn рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдИрд╡реЗрдВрдЯрд▓реЗрдЯ рдХреЗ ALREADY_HANDLED рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди рдкрд░ flask-socketio & gunicorn рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдбреЗрдЯрд╛ рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред

рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЦрдмрд░ рд╣реИ?

@benoitc - рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рд╕реБрдЭрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдКрдкрд░ @miguelgrinberg рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП (Gunicorn рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ eventlet рдХреЗ ALREADY_HANDLED рдирд┐рд░рдВрддрд░ рд╕рдордЭрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рдХрд░рдиреЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП) рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

@ kramer65 рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдлрд╛рдИ рд╕реЗ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯрд▓реЗрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЕрднреА рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рддрд░реНрдХ gunicorn.workers.async.AsyncWorker#handle_request рдЕрдВрджрд░ рдереЛрдбрд╝рд╛ рджрдм рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╡реЗрдВрдЯрд▓реЗрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреА рдЧрдИ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ- рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХ рдЬреЛ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдЬреИрд╕рд╛ рд╡рд╣ рдЕрднреА рдХрд░рддрд╛ рд╣реИред

@tilgovi - рдЖрдкрдХреЛ рдореБрдЭреЗ рдЕрдкрдирд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рд╣реБрдП рдХреБрдЫ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЙрд╕рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕реАрдорд╛ рдХреЛ рдорд╛рд░рд╛ред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИред

рдЗрд╕ рдмреАрдЪ рдореЗрд░реЗ рд▓реЙрдЧ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдКрд░реНрдЬрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╣рд░ рдХрд╛рд░рдг рд╣реИред рдореИрдВ рдЕрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╣реА рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ, рдЕрдХреЗрд▓реЗ рд╣реА рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

2016-08-23 08:07:16 [2185] [ERROR] Error handling request
Traceback (most recent call last):
  File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 45, in handle
    self.handle_request(listener, req, client, addr)
  File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 102, in handle_request
    resp.close()
  File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 369, in close
    self.send_headers()
  File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 284, in send_headers
    tosend = self.default_headers()
  File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 265, in default_headers
    elif self.should_close():
  File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 198, in should_close
    if self.status_code < 200 or self.status_code in (204, 304):
AttributeError: 'Response' object has no attribute 'status_code'

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ ?.....

@qwexvf - рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореЗрд░реЗ рд▓реЙрдЧ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░ рд░рд╣реЗ рд╣реИрдВред :-(

рдХрд┐рд╕реА рдФрд░ рдХреЛ?

@ kramer65 рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБред рдореИрдВ рд╕рджрд┐рдпреЛрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ! рдзрдиреНрдпрд╡рд╛рдж!

рдХреЛрдИ рдЕрдкрдбреЗрдЯреНрд╕?

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдХреНрд▓реАрдирд░ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдПрдХ рд╢реБрд░реБрдЖрдд рд╣реИред

@stefaang рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рдЗрд╕реЗ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ!

рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕ PyPI рдкрд░ рдХрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдХрд▓
рд╢реБрдХреНрд░, резрен рдлрд░рд╡рд░реА реирежрезрен рдХреЛ резрем:рекрем рдмрдЬреЗ, рдПрдбреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕ PyPI рдкрд░ рдХрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЦреБрд▓реА/рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-280685264 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAA4ogTRMF7EfR25G6gLrktOdh_iA4Ciks5rdcDYgaJpZM4HbcdP
.

рдХреНрдпрд╛ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

https://pypi.python.org/pypi/gunicorn

рдирд╣реАрдВ :(

@benoitc рдЕрджреНрдпрддрди рдкрд░ рдХрд┐рд╕реА рднреА рд╢рдмреНрдж рдХреЛ

@defionscode рдореИрдВ рдЧреБрд░реБрд╡рд╛рд░ рд╕реБрдмрд╣ (рдХрд▓) рдХреЛ рд░рд┐рд▓реАрдЬ рдХрд░реВрдВрдЧрд╛ред

рдмрд╣реБрдд рдмрдбрд╝рд┐рдпрд╛ рдзрдиреНрдпрд╡рд╛рдж
рдмреБрдз, реиреи рдлрд░рд╡рд░реА, реирежрезрен рдХреЛ рдкреВрд░реНрд╡рд╛рд╣реНрди резрез:релрек рдмрдЬреЗ рдмреЗрдиреЛрдЗрдЯ рдЪреЗрд╕рдиреЗрдЙ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@defionscode https://github.com/defionscode рдореИрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░реВрдВрдЧрд╛
рдЧреБрд░реБрд╡рд╛рд░ рд╕реБрдмрд╣ (рдХрд▓)ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-281729992 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AEcrYp6QfVpWXhG14f4M-lPDHMn0cFncks5rfGhWgaJpZM4HbcdP
.

рдХреНрдпрд╛ рдпрд╣ рдлрд┐рдХреНрд╕ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

@Decker108 рд╕реНрдЯреЗрдЯрд╕ рдХреЛ https://github.com/benoitc/gunicorn/issues/1471 рджреНрд╡рд╛рд░рд╛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЬ рд░рд┐рд▓реАрдЬ рд╣реЛрдЧреА...

рдпрд╣ рдмрдЧ рдЕрднреА рднреА рдореЗрд░реЗ рдкрдХреНрд╖ рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 19 рдФрд░ 20 рдХреЗ рд╕рд╛рде рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ @benoitc рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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