2016-03-17 5 views
0

У меня есть приложение Flask, которое развернуто на одном экземпляре AWS EC2. В моем файле __init__.py я создал экземпляр BackgroundScheduler с заданием, которое должно запускаться через каждые 1 час. Вот пример моего кода __init__.py:APScheduler на одном экземпляре EC2, вызываемом несколько раз

application = Flask(__name__) 
app = application 
scheduler = BackgroundScheduler() 
run_my_jobs = scheduler.add_job(my_job, 'interval', hours=1) 
scheduler.start() 

Я хотел бы предположить, что, поскольку конкретизация осуществляется вне контекста Колбы, и только один единственный экземпляр работает на EC2, что мой планировщик должен быть создан только один раз, независимо от того, сколько пользователей подключено к моему приложению Flask в течение дня.

Это произошло в последние пару месяцев, однако недавно за последние пару дней я заметил, что планировщик выполняет эту работу почти 2-3 раза в час. Хотя я продолжаю продвигать код для производства, файл __init__.py остался без изменений, поэтому я смущен относительно возможных причин, вызывающих множественные экземпляры планировщика?

+0

Как вы используете приложение? – davidism

+0

@davidism У меня есть он в модуле приложения, и когда он попадает в AWS, есть файл application.py, который импортирует приложение и вызывает application.run() – nicknaky

+0

Это не решит вашу проблему, но не использует встроенную -in dev сервер в производстве. Он не предназначен для этого. – davidism

ответ

0

Есть два основных способа это может произойти:

  1. Использование процесса более чем один работник
  2. Ввод кода в модуле, который является точкой входа вашего приложения, а не защищая его с if __name__ == '__main__': блока

Из вашего описания я предполагаю, что № 1 не так, поэтому я бы пошел на # 2.

+0

Итак, код находится в файле \ __ init__.py моего модуля приложения. А затем в отдельном файле вне каталога приложения/каталога находится файл application.py, который содержит файл if \ __ name__ == "\ __ main__": block, где у меня есть application.run(), и с объектом приложения, являющимся импортированных ранее из приложения. Каким будет правильный способ установить это, учитывая, что требования к развертыванию на EC2 будут через файл application.py в корневом каталоге, а мой модуль приложения находится внутри папки приложения? – nicknaky

+0

У меня нет опыта работы с EC2, но в целом импорт не должен иметь побочных эффектов. Поместите код настройки планировщика в функцию и импортируйте и вызовите эту функцию из вашего приложения.py. –

 Смежные вопросы

  • Нет связанных вопросов^_^