Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python如何在线程中运行flask应用程序?_Python_Multithreading_Flask - Fatal编程技术网

python如何在线程中运行flask应用程序?

python如何在线程中运行flask应用程序?,python,multithreading,flask,Python,Multithreading,Flask,如何在单独的线程中运行flask应用程序? 我可以在main中运行我的flask应用程序,但是 我需要从一个线程启动flask应用程序,当我在主线程中启动一个事件以启动线程引擎时,该线程应该正在运行 所以这个很好用 @app.route("/voice", methods=['GET', 'POST']) def voice(): ......... return str(resp) @app.route("/mainFlow", methods=['GET', 'POST']) de

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

我需要从一个线程启动flask应用程序,当我在主线程中启动一个事件以启动线程引擎时,该线程应该正在运行

所以这个很好用

@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
试试这个:

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()

你检查过这个链接了吗?谢谢,看起来好像有人问过它关于调试的问题,我想知道关于线程的问题。我也知道我可以在主线程中运行Flask,并且我没有使用调试。我需要在线程模式下运行。此链接是否回答您的问题?我有一个工作示例,您可以从中借鉴。是我启动线程运行烧瓶的地方。请特别注意use_reloader=False部分,它避免了很多悲伤。它很有效,Dave,非常感谢!!!!好的,如果我的答案没有帮助,我会删除它,因为你没有对它进行投票或将它标记为帮助