#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