Запуск Python во Flask с постоянной фоновой задачей - PullRequest
0 голосов
/ 04 мая 2018

Я запустил скрипт Python3.6 на своем ноутбуке, и теперь я хотел бы развернуть его на GCP App Engine. Я использовал их уроки и другие, чтобы конвертировать скрипт в WSGI. Однако у меня возникают проблемы с тем, чтобы фоновая задача выполнялась постоянно, а также я могу использовать маршрут для просмотра результатов.

Вот простой пример. Используя это, я вижу выводимое сообщение / route Hello World!

from flask import Flask 
app = Flask(__name__)    

@app.route('/')  
def main():
    """Say hello"""
    return 'Hello, world!'

if __name__ == '__main__': 
    app.run()  

Если я добавлю цикл while, цикл будет работать, но тогда маршрут больше не будет функционировать. Что имеет смысл, я просто не знаю синтаксис, чтобы оператор while выполнялся как фоновая задача. Я видел примеры CRON, но это то, что работает постоянно - не каждые X минут.

    from flask import Flask 
    app = Flask(__name__)    

    @app.route('/') 

    counter = 0
    while True:
      counter += counter
      print(counter)

    def main():
        """Say hello"""
        return 'Hello, world! ' + str(counter)

    if __name__ == '__main__':  
        app.run() 

Обновление: я должен использовать Flask-APScheduler для этого ?: https://github.com/viniciuschiele/flask-apscheduler

1 Ответ

0 голосов
/ 04 мая 2018

Один из подходов к этому - создать два маршрута - один, который запускает счетчик, и который возвращает сам счет. Обратите внимание, я добавил «threadaded = True», чтобы разрешить несколько вызовов.

from flask import Flask 
app = Flask(__name__)    

@app.route('/')  
def main():
    """Say hello"""
    global index_counter
    print(index_counter)
    return "Hello World: %s" % str(index_counter)

@app.route('/counter')
def counter():
    global index_counter
    index_counter = 0
    while True:
      index_counter += 1

if __name__ == '__main__': 
    app.run(threaded=True)

Теперь вы можете сначала вызвать:

http://localhost/counter

Это запустит счетчик.

И тогда в любой момент вы можете вызвать: http://localhost

И должен распечатать значение счетчика.

...