簡體   English   中英

Flask + Restless無法在調試模式下重新加載

[英]Flask + Restless fails to reload in debug mode

我正在編寫我的第一個Flask-Restless API,但遇到一個小問題,這使我有些煩惱。

如果我不在調試模式下,它可以正常工作。

但是,如果我將調試模式設置為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

很明顯,這是由於在DEBUG模式下的重新加載器而發生的,並且正如我所說,如果將DEBUG設置為False,或者即使我使用app.run(use_reloader = False)啟動它,也可以正常工作

我試圖找出即使在調試時Restless是否也使用了一些多線程,並且是否可以禁用它,但是找不到任何相關的東西。

版本

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

操作系統:Linux ElementaryOS 0.4.1(基於Ubuntu 16.04)

知道為什么會這樣嗎,我該如何解決?

**更新** [已解決]

問題實際上是調用app.run ,然后使用flask run執行 ...這似乎是在產生兩個不同線程的愚蠢事物。

問題實際上是在代碼中調用此代碼:

app.run() 

然后執行燒瓶運行 ,似乎會產生兩個不同的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM