Есть ли способ автоматически перезагрузить app.py? - PullRequest
0 голосов
/ 07 мая 2020

Я создал и опубликовал приложение Flask на pythonanywhere. Это однофайловое приложение с данными, которые обновляются каждые 5 минут. Мне нужно обновлять мою панель каждые 5 минут. После перезагрузки он будет обновляться, но перезагружать вручную каждые 5 минут невозможно. Есть ли способ перезагрузить app.py с помощью скрипта или изменить некоторые настройки?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

PythonAnywhere имеет API , который позволяет вам перезагружать код веб-сайта - страница справки, на которую я указал, объясняет все детали API и содержит инструкции по его настройке. Кроме того, пример кода, представленный на странице настройки токена API, является в точности кодом Python, который вам понадобится для перезагрузки веб-сайта.

Таким образом, вы можете написать сценарий для этого, а затем использовать " Запланированные задачи ", чтобы запускать его каждые пять минут (для этого вам нужно будет использовать двенадцать часовых задач).

Однако я бы не рекомендовал писать код, чтобы сайт нужно было перезагружать по порядку. обновлять. Было бы лучше заставить его обслуживать данные непосредственно из базы данных, а затем запланировать задачи, выполняемые вне контекста веб-сайта, для обновления этой базы данных каждые пять минут.

0 голосов
/ 08 мая 2020

Да, вы можете это сделать.

просто запустите приложение flask в новом процессе, затем подготовьте новую функцию, которая будет выполнена через 5 минут для перезапуска скрипта

# coding: utf-8

import sys
import subprocess

from threading import Timer
from multiprocessing import Process

from flask import Flask

app = Flask(__name__)

def run():
    # this is a block function so we must run it in a new process
    app.run()

def run_after(p):
    print("## Restarting ....")
    # terminate the process
    p.terminate()

    ## re-run the script. eg (python test.py blah blah)
    args = [sys.executable] + [sys.argv[0]]
    subprocess.call(args)

if __name__ == "__main__":
    # run flask app in a new process
    p = Process(target=run, args=())
    p.start()

    # set a threading timer which will be execute (run_after) function after 5 min
    _timer = Timer(5 * 60, run_after, (p,))
    _timer.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...