我正在使用celery运行一个烧瓶应用程序来卸载IIS 6.5服务器上的长时间运行进程并使用python 2.7 python 2.7,flask和IIS 7服务器的选择由公司强制执行,无法更改。
烧瓶应用程序在IIS服务器上运行(因此服务器设置应该是正确的),但以下情况除外。
我正在努力寻找良好的实现方式,使烧瓶在服务器上顺利运行。 我在网站上搜索了类似的问题,但到目前为止还没有任何帮助。 当我在我的电脑上运行烧瓶应用程序时,如果我使用选项A 或选项B ,应用程序仅按预期执行。
选项A:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from FastCGI via IIS!"
if __name__ == "__main__":
app.run(threaded=True) # <--- This works
选项B:
如果我将烧瓶应用程序包裹在龙卷风中,它也可以正常运行:
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from myapp import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
选项C:
但是,如果我只使用默认参数运行烧瓶应用程序,那么它不起作用,Web服务器不会返回在将任务卸载到芹菜后应返回的视图。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from FastCGI via IIS!"
if __name__ == "__main__":
app.run() # <--- Default App
适用于OPTION A&amp; A的视图示例B但不适用于OPTION C或ISS:
下面是芹菜挑选的异步任务的精简示例。请注意,我使用Flask-Classy生成视图,因此代码与Flask中的传统路由略有不同。
class AnalysisView(FlaskView):
### Index page ---------------
def index(self):
return render_template('analysis.intro.html')
### Calculation process ------
def calculate(self, run_id):
t_id = task_create_id(run_id)
current_analysis = a_celery_function.apply_async(args=[x, y], task_id=t_id)
# Redirect to another view --> Not working when OPTION C or on ISS server
return redirect(url_for('AnalysisView:inprogress', run_id=run_id))
### Waiting page ---------------
def inprogress(self, run_id=run_id):
return render_template('analysis.inprogress.html')
我的主要问题是如何使用 OPTION A (最好是因为它对我来说涉及更少的更改)或 OPTION B 与IIS服务器一起使用? 有没有办法告诉flask在Flask()初始化期间或通过配置设置运行thread = True?
先谢谢你的帮助。