python بدء تطبيق قارورة في موضوع منفصل




1 Answers

إذا كنت تبحث عن الوصول إلى محطة ipython في دورق قم بتشغيل التطبيق الخاص بك في موضوع منفصل ، حاول هذا المثال: -

from flask import Flask                                                         
import thread
data = 'foo'
app = Flask(__name__)
@app.route("/")
def main():
    return data
def flaskThread():
    app.run()
if __name__ == "__main__":
    thread.start_new_thread(flaskThread,())

قم بتشغيل هذا الملف في ipython

python multithreading flask

أقوم حاليًا بتطوير تطبيق بايثون أرغب في الاطلاع على إحصاءات في الوقت الفعلي. كنت أرغب في استخدام Flask أجل جعلها سهلة الاستخدام والفهم.

تكمن المشكلة في أنه يجب أن يبدأ خادم Flask الخاص بي في بداية تطبيق Python الخاص بي ويتوقف في النهاية. يجب أن تبدو هذه:

def main():
    """ My main application """
    from watcher.flask import app
    # watcher.flask define an app as in the Quickstart flask documentation.
    # See: http://flask.pocoo.org/docs/0.10/quickstart/#quickstart

    app.run() # Starting the flask application

    do_my_stuff()

    app.stop() # Undefined, for the idea 

لأنني بحاجة إلى سياق التطبيق الخاص بي (للإحصائيات) ، لا يمكنني استخدام multiprocessing.Process . ثم كنت أحاول استخدام threading.Thread ، ولكن يبدو أن Werkzeug لا يحب ذلك:

 * Running on http://0.0.0.0:10079/
Exception in thread Flask Server:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File ".../develop-eggs/watcher.flask/src/watcher/flask/__init__.py", line 14, in _run
    app.run(host=HOSTNAME, port=PORT, debug=DEBUG)
  File ".../eggs/Flask-0.10.1-py2.7.egg/flask/app.py", line 772, in run
    run_simple(host, port, self, **options)
  File ".../eggs/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 609, in run_simple
    run_with_reloader(inner, extra_files, reloader_interval)
  File ".../eggs/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 524, in run_with_reloader
    signal.signal(signal.SIGTERM, lambda *args: sys.exit(0))
ValueError: signal only works in main thread

كيف يمكنني القيام بذلك دون تشغيل قارورة في الموضوع الرئيسي؟




Related