Flask APP - ValueError: signal only works in main thread
41,262
Solution 1
The problem you are facing has to do with a bug in the Flask-SocketIO package which replaces the flask run
command. Due to this Flask-SocketIO is always used even if you don’t import it. There are several solutions:
- Uninstall Flask-SocketIO
- Do not use
flask run
but run the main file of your program - Disable debugging
- Disable auto loading if debugging required
flask run --no-reload
Reference to the Flask-SocketIO bug: issue 817
Solution 2
I solved the problem thanks to @AkshayKumar007 answer on github. That was the most convenient solution for me.
Hey guys, I was also facing the same problem. So to summarize, if you're using socket-io, don't do flask run. First, add
if __name__ == "__main__": socketio.run(app)
At the end of your application. To run it just do
python3 __init__.py
Hope it helped.
Author by
Frennetix
Updated on August 20, 2020Comments
-
Frennetix over 3 years
I try to create a simple flask app:
from flask import Flask app = Flask(__name__) if __name__ == '__main__': app.run()
but when I add the debug:
FLASK_APP = run.py FLASK_ENV = development FLASK_DEBUG = 1
I got the following error:
ValueError: signal only works in main thread
here the full stacktrace
FLASK_APP = run.py FLASK_ENV = development FLASK_DEBUG = 1 In folder c:/MyProjectPath/api c:\MyProjectPath\api\venv\Scripts\python.exe -m flask run * Serving Flask-SocketIO app "run.py" * Forcing debug mode on * Restarting with stat * Debugger is active! * Debugger PIN: 283-122-745 Exception in thread Thread-1: Traceback (most recent call last): File "c:\appdata\local\programs\python\python37\Lib\threading.py", line 917, in _bootstrap_inner self.run() File "c:\appdata\local\programs\python\python37\Lib\threading.py", line 865, in run self._target(*self._args, **self._kwargs) File "c:\MyProjectPath\api\venv\lib\site-packages\flask_socketio\cli.py", line 59, in run_server return run_command() File "c:\MyProjectPath\api\venv\lib\site-packages\click\core.py", line 764, in __call__ return self.main(*args, **kwargs) File "c:\MyProjectPath\api\venv\lib\site-packages\click\core.py", line 717, in main rv = self.invoke(ctx) File "c:\MyProjectPath\api\venv\lib\site-packages\click\core.py", line 956, in invoke return ctx.invoke(self.callback, **ctx.params) File "c:\MyProjectPath\api\venv\lib\site-packages\click\core.py", line 555, in invoke return callback(*args, **kwargs) File "c:\MyProjectPath\api\venv\lib\site-packages\click\decorators.py", line 64, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "c:\MyProjectPath\api\venv\lib\site-packages\click\core.py", line 555, in invoke return callback(*args, **kwargs) File "c:\MyProjectPath\api\venv\lib\site-packages\flask\cli.py", line 771, in run_command threaded=with_threads, ssl_context=cert) File "c:\MyProjectPath\api\venv\lib\site-packages\werkzeug\serving.py", line 812, in run_simple reloader_type) File "c:\MyProjectPath\api\venv\lib\site-packages\werkzeug\_reloader.py", line 267, in run_with_reloader signal.signal(signal.SIGTERM, lambda *args: sys.exit(0)) File "c:\appdata\local\programs\python\python37\Lib\signal.py", line 47, in signal handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler)) ValueError: signal only works in main thread