保持APScheduler的运行//持久保存对象(烧瓶)

时间:2018-11-05 09:13:11

标签: python flask apscheduler

我有一个Flask应用程序,它使用APScheduler程序包作为调度程序。

我希望将APScheduler实例保留在我的Flask应用程序中,以使其永远不会关闭并且可以处理计划的作业。

这就是我所拥有的,但是该对象似乎并没有持久化。预定的呼叫不会发生。在日志中,我确实看到了“下次在XXX唤醒”,因此我假设调度程序最终被关闭了。

from flask import Flask
from scheduler import Scheduler
application = Flask(__name__)
scheduler = Scheduler()

if __name__ == "__main__":
    application.run(debug=False, port=5002, use_reloader=False)

在调度程序文件中,我将其设计为单例。

class Scheduler(object):
    instance = None

    def __init__(self):
        if not Scheduler.instance:
            Scheduler.instance = Scheduler.__Scheduler()

    def __getattr__(self, name):
        return getattr(self.instance, name)

    @staticmethod
    def run_job(job_data):
        ## Trigger function for running a job
        pass

    class __Scheduler:
        def __init__(self):
            """Scheduler uses APScheduler to schedule jobs that will be sent to workers"""
            self.scheduler = None
            self.job_store = None
            self.initialize_scheduler()

        def initialize_scheduler(self):

            POSTGRES_USER = os.environ["RDS_USERNAME"]
            POSTGRES_PW = os.environ["RDS_PASSWORD"]
            POSTGRES_URL = os.environ["RDS_HOSTNAME"]
            POSTGRES_DB = os.environ["RDS_DB_NAME"]
            self.SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://{user}:{pw}@{url}/{db}'.format(user=POSTGRES_USER,
                                                                                            pw=POSTGRES_PW,
                                                                                            url=POSTGRES_URL,
                                                                                            db=POSTGRES_DB)

            self.job_store = SQLAlchemyJobStore(url=self.SQLALCHEMY_DATABASE_URI)

            self.scheduler = BackgroundScheduler(jobstores={
                "default" : self.job_store
            })

            self.scheduler.start()

            print("Scheduler initialized")

        def schedule_job(self, job_data):
            print("Scheduling job", job_data["id"])

            scheduler = self.scheduler

            ## Scheduling tasks here using IntervalTrigger

0 个答案:

没有答案