在IIS 7

时间:2016-05-12 09:43:45

标签: python iis flask

我正在使用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?

先谢谢你的帮助。

0 个答案:

没有答案