Как установить обработчик запуска для фляги app.run () - PullRequest
0 голосов
/ 16 февраля 2019

Я не нашел способа установить обработчик, чтобы определять, когда флеш-сервер уже запущен.Рассмотрим следующий фрагмент кода:

import flask
import requests

def on_start():
    # send a request to the server, it's safe to do so
    # because we know it's already running
    r = requests.get("http://localhost:1234")
    print(r.text) # hello world

app = flask.Flask(__name__)
@app.route("/")
def hello():
    return "hello world"
app.run(port=1234, host="localhost", on_start=on_start)

Последняя строка завершается неудачно, поскольку on_start не является аргументом run, но, надеюсь, вы поймете, что я пытаюсь сделать.Как я могу это сделать?

1 Ответ

0 голосов
/ 16 февраля 2019

Что вы можете сделать, это обернуть функцию, которую вы хотите запустить, с помощью декоратора before_first_request, как показано здесь ==> http://flask.pocoo.org/docs/1.0/api/#flask.Flask.before_first_request

Однако, он не будет сброшен, пока кто-то не сделаетзапрос к серверу, но вы можете сделать что-то вроде этого:

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

@app.before_first_request
def activate_job():
    def run_job():
        while True:
            print("Run recurring task")
            time.sleep(3)

    thread = threading.Thread(target=run_job)
    thread.start()

@app.route("/")
def hello():
    return "Hello World!"


def start_runner():
    def start_loop():
        not_started = True
        while not_started:
            print('In start loop')
            try:
                r = requests.get('http://127.0.0.1:5000/')
                if r.status_code == 200:
                    print('Server started, quiting start_loop')
                    not_started = False
                print(r.status_code)
            except:
                print('Server not yet started')
            time.sleep(2)

    print('Started runner')
    thread = threading.Thread(target=start_loop)
    thread.start()

if __name__ == "__main__":
    start_runner()
    app.run()

Подробная информация и источник через Google-фу: https://networklore.com/start-task-with-flask/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...