Python Как я могу запустить приложение колбу в потоке? - PullRequest
0 голосов
/ 02 июля 2019

Как я могу запустить мое приложение фляги в отдельном потоке?Я могу запустить свое приложение фляги в основном, но

Мне нужно запустить приложение фляги из потока, этот поток должен работать, пока в основном потоке я инициирую событие для запуска механизма потока.

так что все отлично работает

@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

1 Ответ

0 голосов
/ 03 июля 2019

попробуйте это:

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

или используйте колбу с режимом отладки. Ложь это решит вашу проблему:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...