Как запускать функцию каждые 12 часов внутри приложения flask?

#python #multithreading #flask #flask-sqlalchemy

#python #многопоточность #flask #flask-sqlalchemy

Вопрос:

Я создаю API, который использует ML для прогнозирования некоторого результата, мне нужно обновлять мой набор данных каждые 1 минуту (получать новые данные) и переобучать набор данных каждые 12 часов, для достижения этой цели я использую многопроцессорную обработку, и мое приложение развернуто на выделенном сервере объемом 4 ГБ.

Я использую модель LSTM и Nginx / gunicorn для веб-сервера для приложения flask.

вот фрагмент кода о том, как я вызываю эти 2 функции:

 def fetch():
    while True:
        #fetching done
        
        time.sleep(60) #runs every 60 minutes

def retrain():
    while True:
        #training of LSTM model

        time.sleep(43200) #runs every 12 hours

multiprocessing.Process(target=fetch).start()
multiprocessing.Process(target=retrain).start()

if __name__ == '__main__':
    multiprocessing.Process(target=fetch).start()
    multiprocessing.Process(target=retrain).start()
    app.run(debug=False, host='0.0.0.0')
 

Проблема, с которой я сталкиваюсь, заключается в загрузке процессора, я получаю до 190% загрузки процессора, а максимальная длина моего набора данных составляет 100 тыс., Мне интересно, должен ли быть лучший способ сделать это?

Спасибо

Комментарии:

1. Я бы использовал системный диспетчер задач для его запуска. В Linux я бы использовал program cron для запуска скрипта каждые 1 минуту, а другой скрипт — каждые 12 часов. И тогда скрипт не должен выполняться все время.

Ответ №1:

Вы можете использовать Celery для периодического запуска задачи, продвижение вперед multiprocessing добавит сложности вашему коду. разработка, поддержка и отладка станут в тысячу раз сложнее.

взгляните на ссылки ниже:

https://docs.celeryproject.org/en/stable/getting-started/introduction.html

https://rudra.dev/posts/setting-up-a-task-scheduler-in-flask