【问题标题】:APScheduler running one thread in local server, two threads when deployed remotelyAPScheduler 在本地服务器运行一个线程,远程部署时运行两个线程
【发布时间】:2015-08-24 20:25:18
【问题描述】:

我有一个 Flask 网络服务器,它与 POSTGREsql 数据库交互以从网站获取和插入数据。

我还有一个 APScheduler 后台调度程序任务,它会定期检查数据库,查找具有某些属性的某些对象,例如创建后 5 分钟、第 x 列超过 10 等,然后在电子邮件中发送该信息。

我现在遇到的问题是, 在本地环境中运行时,只执行一个任务,并且它每 (30) 秒运行一次,就像我想要的那样。 但是,如果我在 Heroku 上部署它,两个相同的任务会在几毫秒内执行,这会导致问题。

负责运行后台任务的代码是这样的。

app = Flask(__name__)
#app.debug = True
app.debug = False
app.config.from_pyfile('config.py')
db = models.db
db.init_app(app)
migrate = Migrate(app, db)


manager = Manager(app)
manager.add_command('db', MigrateCommand)
job_defaults = {
    'coalesce': False,
    'max_instances': 1
}
sched = BackgroundScheduler(job_defaults=job_defaults)
sched.start()


@sched.scheduled_job('interval', seconds=30)
def my_job():
    with app.app_context():
        my_class = OutageCheck(db)
        my_class.checkOutage()

【问题讨论】:

  • 您是在 Heroku 上运行多台发电机还是只运行一台发电机?
  • @SeanVieira :一台发电机,日志显示它来自同一台发电机
  • 你是如何在 Heroku(app.run 或其他 WSGI 服务器)上运行应用程序的?
  • app.run 是正确的,manager.run 因为我使用flask-script

标签: heroku flask apscheduler


【解决方案1】:

它可以是一个重新加载器,在远程服务器上运行 2 个烧瓶实例。 你可以试试这个

app.run(debug=True, use_reloader=False)

咨询这个问题How to stop Flask from initialising twice in Debug Mode?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多