简体   繁体   中英

Error when running Flask application with web sockets and Gunicorn

When running my app on the local server using gunicorn, I get the following error log:

[2019-06-10 20:12:20 +0200] [34160] [ERROR] Socket error processing request.
Traceback (most recent call last):
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle
    self.handle_request(listener, req, client, addr)
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 191, in handle_request
    six.reraise(*sys.exc_info())
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/six.py", line 625, in reraise
    raise value
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 183, in handle_request
    resp.close()
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/http/wsgi.py", line 409, in close
    self.send_headers()
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/http/wsgi.py", line 329, in send_headers
    util.write(self.sock, util.to_bytestring(header_str, "ascii"))
  File "/Users/user/Documents/project/venv/lib/python3.6/site-packages/gunicorn/util.py", line 304, in write
    sock.sendall(data)
OSError: [Errno 9] Bad file descriptor

My gunicorn configuration is the following, I executed it using gunicorn -w 4 -b 0.0.0.0:8080 uwsgi:app config=config.ini:

[server:main]
workers = 4
worker_class = 'eventlet'
bind = '0.0.0.0:8080'
reload = False
daemon = True
timeout = 1200
port = 8080

Code for web socket connection via Flask-SocketIO:

app = Flask(__name__)
Session(app)
socketio = SocketIO(app)

I am using Flask-SocketIO, for now I am just trying to get the socket framework working over the wsgi server without Nginx on my local machine. Any suggestions on what the problem may be? Cannot piece it together from these error logs - thanks in advance for any advice!

I had to specify the worker as eventlet, now it is working on the local machine with gunicorn. I did that by running:

gunicorn -w 1 -b 0.0.0.0:8080 app:app --worker-class eventlet --reload

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM