【问题标题】:python How can I run flask app in a thread?python 如何在线程中运行烧瓶应用程序?
【发布时间】:2019-11-13 07:39:48
【问题描述】:

如何在单独的线程中运行我的烧瓶应用程序? 我可以在 main 中运行我的烧瓶应用程序,但是

我需要从一个线程启动烧瓶应用程序,该线程应该在主线程中运行,我启动一个事件以启动线程引擎。

所以这很好用

@app.route("/voice", methods=['GET', 'POST'])
def voice():
  .........
  return str(resp)

@app.route("/mainFlow", methods=['GET', 'POST'])
def mainFlow():
    """Respond """
    .......

    return str(resp)


if __name__ == "__main__":
    app.run(debug=True)

但我需要这样的东西

def myIVR():
    print("-----------------Thrd1-myIVR --------------------")
    app = Flask(__name__)
    app.run(debug=True)

    @app.route("/voice", methods=['GET', 'POST'])
    def voice():
      ........
      return str(resp)

    @app.route("/mainFlow", methods=['GET', 'POST'])
    def mainFlow():
        """Respond to """
        resp = VoiceResponse()

def myTest():
    print("E2Etest")
    thrd1 = threading.Thread(target=myIVR, args=[])
    thrd1.start()
    print("trigger event")
    #xyz()

################################################################
def main():
    myTest()

if __name__ == '__main__':
    main()

我收到此错误

  File "C:\......\AppData\Local\Programs\Python\Python37-32\lib\signal.py", line 47, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main thread

【问题讨论】:

  • 你检查过这个链接吗stackoverflow.com/questions/53522052/…
  • 谢谢,好像有人问过debug,我想知道线程。我也知道我可以在主线程中运行 Flask,而且我没有使用调试。我需要在线程模式下运行。
  • 这个链接是否回答了你的问题?
  • 我有一个可以借鉴的工作示例。 github.com/davewsmith/lapse/blob/master/lapse.py#L31 是我启动线程以运行 Flask 的地方。特别注意use_reloader=False 部分,它避免了太多的悲伤。
  • 它有效,戴夫,非常感谢!!!!

标签: python multithreading flask


【解决方案1】:

试试这个:

from flask import Flask                                                         
import threading
app = Flask(__name__)



def myIVR():
  print("-----------------Thrd1-myIVR --------------------")
  app = Flask(__name__)
  threading.Thread(target=app.run).start()

@app.route("/voice", methods=['GET', 'POST'])
def voice():
  return str(resp)

@app.route("/mainFlow", methods=['GET', 'POST'])
def mainFlow():
    """Respond to """
    resp = VoiceResponse()

def myTest():
  print("E2Etest")
  thrd1 = threading.Thread(target=myIVR, args=[])
  thrd1.start()
  print("trigger event")
#xyz()

################################################################
def main():
    myTest()

if __name__ == '__main__':
    main()

或者使用带有调试模式的烧瓶 False 它会解决你的问题:

from flask import Flask                                                         
import threading
app = Flask(__name__)



def myIVR():
  print("-----------------Thrd1-myIVR --------------------")
  app = Flask(__name__)
  app.run(debug=False)

@app.route("/voice", methods=['GET', 'POST'])
def voice():
  return str(resp)

@app.route("/mainFlow", methods=['GET', 'POST'])
def mainFlow():
    """Respond to """
    resp = VoiceResponse()

def myTest():
  print("E2Etest")
  thrd1 = threading.Thread(target=myIVR, args=[])
  thrd1.start()
  print("trigger event")
#xyz()

################################################################
def main():
    myTest()

if __name__ == '__main__':
    main()

【讨论】:

  • 好的,如果没有帮助,我会删除我的答案,因为您没有投票或将其标记为有帮助
猜你喜欢
  • 2015-07-05
  • 1970-01-01
  • 2018-10-25
  • 2018-12-13
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多