debug Flask server inside Jupyter Notebook

Issue

I want to debug small flask server inside jupyter notebook for demo.

I created virtualenv on latest Ubuntu and Python2 (on Mac with Python3 this error occurs as well), pip install flask jupyter.

However, when I create a cell with helloworld script it does not run inside notebook.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=True,port=1234)

File
“/home/***/test/local/lib/python2.7/site-packages/ipykernel/kernelapp.py”,
line 177, in _bind_socket
s.bind(“tcp://%s:%i” % (self.ip, port)) File “zmq/backend/cython/socket.pyx”, line 495, in
zmq.backend.cython.socket.Socket.bind
(zmq/backend/cython/socket.c:5653) File
“zmq/backend/cython/checkrc.pxd”, line 25, in
zmq.backend.cython.checkrc._check_rc
(zmq/backend/cython/socket.c:10014)
raise ZMQError(errno) ZMQError: Address already in use

NB – I change the port number after each time it fails.

Sure, it runs as a standalone script.

update without (debug=True) it’s ok.

Solution

I installed Jupyter and Flask and your original code works.


The flask.Flask object is a WSGI application, not a server. Flask uses Werkzeug’s development server as a WSGI server when you call python -m flask run in your shell. It creates a new WSGI server and then passes your app as paremeter to werkzeug.serving.run_simple. Maybe you can try doing that manually:

from werkzeug.wrappers import Request, Response
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 9000, app)

Flask.run() calls run_simple() internally, so there should be no difference here.

Answered By – yorodm

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published