多次调用单个EC2实例上的APScheduler

时间:2016-03-17 18:30:45

标签: python amazon-ec2 flask apscheduler

我有一个部署在单个AWS EC2实例上的Flask应用程序。在我的__init__.py文件中,我实例化了一个BackgroundScheduler,其作业计划每隔1小时运行一次。 这是我的__init__.py代码的一个例子:

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

我认为由于实例化是在Flask上下文之外完成的,并且在EC2上只运行一个单一实例,因此我的调度程序只应实例化一次,无论有多少用户连接到我的Flask应用程序一天。

过去几个月的情况一般如此,但最近几天我注意到调度程序每小时执行工作几乎2-3次。虽然我一直在继续将代码推送到生产环境,但是__init__.py文件保持不变,所以我对导致调度程序多次实例化的可能原因感到困惑?

1 个答案:

答案 0 :(得分:0)

通常有两种方法可以实现:

  1. 使用多个工作流程
  2. 将代码放在作为应用程序入口点的模块中,而不是使用if __name__ == '__main__':块保护它
  3. 根据你的描述,我认为#1不是这样,所以我会选择#2。