2017-11-30 12 views
0

私は最初のFlask-Restless APIを書いていて、ちょっと気になる小さな問題に遭遇しました。Flask + Restlessがデバッグモードで再読み込みに失敗する

DEBUG MODEでないとうまくいきます。

デバッグモードをTrueに設定すると、アプリケーションはリロードしようとしている間に途切れているように見えますが、エンドポイントにアクセスすると発生します。リロードは機能しません。

あなたは、私も非常に小さなアプリケーションでそれを再現できることを見ることができるように私は、この小さな例で来た:

import flask_sqlalchemy 
import flask_restless 
import flask 

app = flask.Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 
db = flask_sqlalchemy.SQLAlchemy(app) 

class Person(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.Unicode, unique=True, nullable=False) 

db.create_all() 

manager = flask_restless.APIManager(app, flask_sqlalchemy_db=db) 
manager.create_api(Person) 

app.run() 

、私は自分のアプリケーションの任意のエンドポイントにアクセスしようとするたびに、私は次の取得エラー:

127.0.0.1 - - [30/Nov/2017 09:39:59] "GET/HTTP/1.1" 500 - 
Traceback (most recent call last): 
    File "/<path>/app.py", line 46, in <module> 
    app.run() 
    File "/<myvenc/>devices/lib/python3.5/site-packages/flask/app.py", line 841, in run 
    run_simple(host, port, self, **options) 
    File "/<myvenv>/devices/lib/python3.5/site-packages/werkzeug/serving.py", line 737, in run_simple 
    reloader_type) 
    File "/<myvenv>/devices/lib/python3.5/site-packages/werkzeug/_reloader.py", line 257, in run_with_reloader 
    signal.signal(signal.SIGTERM, lambda *args: sys.exit(0)) 
    File "/usr/lib/python3.5/signal.py", line 47, in signal 
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler)) 
ValueError: signal only works in main thread 

それがためにデバッグモードでリロード機能の起こっていることは明らかである、と私が言ったように、私はFalseにDEBUGを設定した場合、それは正常に動作、または私はそれがapp.runを使用して起動しても、 (use_reloader = False)

私が落ち着きがDEBUGの中であってもいくつかのマルチスレッドを使用しているかどうかを調べようとしましたが、それを無効にすることはできますが、関連するものは何も見つかりませんでした。

バージョン

Python==3.5.2 
Flask==0.12.2 
Flask-Restless==0.17.0 
Flask-SQLAlchemy==2.3.2 
Werkzeug==0.12.2 

OS:(Ubuntuの16.04に基づく)のLinux ElementaryOS 0.4.1

任意のアイデアは、なぜ起こって、どのように私はそれを修正することができるということですか?

** UPDATE ** [SOLVED]問題は、実際にapp.runを呼び出し、2つの異なるスレッドを生成しているようだフラスコラン ...愚かな事を実行していた

app.run() 

と、2つの異なるスレッドを生成しているようだフラスコランで実行:

+0

質問を更新する代わりに回答してください。 –

+0

私は、Stackoverflowが私の質問に答えることができるようになるまで、数時間待たなければなりません... IIRC – danielfranca

答えて

0

問題は、実際のコードでこれを呼んでいました。

関連する問題