带反向代理的APS + Flask不运行APS作业

时间:2016-05-25 18:02:34

标签: python python-2.7 nginx flask apscheduler

我有一个Flask应用程序,它使用APS(高级python调度程序)来处理通过(S)FTP传输文件。当我使用Werkzeug进行测试时,这非常有用。当我使用CherryPy进行测试时,这非常有用。当我和Gunicorn一起测试时,这很有用。但是,当我使用Nginx + CherryPy或Gunicorn反向代理进行测试时,作业已安排但从未运行。可以唤醒调度程序,停止/启动调度程序,暂停和恢复作业,但它们永远不会运行,我不知道从哪里开始调试。

APS设置如下:

DEFAULT_MISFIRE_GRACETIME = 10800  # seconds
DEFAULT_URL = 'sqlite:///myapp/var/db/jobs.sqlite.db'
MAX_JOB_INSTANCES = 1
THREADS = 20
COALESCE = True

jobstores = {
    'default': SQLAlchemyJobStore(url=DEFAULT_URL)
}

executors = {
    'default': ThreadPoolExecutor(THREADS)
}

job_defaults = {
    'coalesce': COALESCE,
    'max_instances': MAX_JOB_INSTANCES,
    'misfire_grace_time': DEFAULT_MISFIRE_GRACETIME
}

scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors,
                                job_defaults=job_defaults, timezone=pytz.utc)

scheduler.start()

和作业被安排如下(其中“when”是一个日期时间对象,“rid”和“sid”是整数ID,前者是发送的东西的ID,后者是服务的ID它将被发送)

trigger = DateTrigger(when, timezone=pytz.utc)
callable_ = 'myapp.core.task.models:Worker.xmit_files'
id_ = 'xmit_{}_{}'.format(rid, sid)
name = 'Transmit files for id {} to service id {}'.format(rid, sid)
kwargs = {'rid': rid, 'sid': sid}

job = scheduler.add_job(callable_,
                        kwargs=kwargs, id=id_,
                        trigger=trigger, name=name)

并且发送的位看起来像这样......

class Worker:

    @staticmethod
    def xmit_files(rid=None, sid=None):
        from myapp.app import create_app
        app = create_app()
        with app.app_context():
            svc = myapp.core.service.models.Service.get(sid)
            rsh = Rdata.query.get(rid)  # SQLAlchemy
            svc.xmit(rsh)
     ...

(为了清晰起见,完全检查,记录,尝试/除了块除外。)同样,只要它不在Nginx后面运行,这一点工作正常,但是只要它落后于Nginx作业,但是从未运行。我认为执行作业的过程绝不应该与Nginx相互作用。这可能与要求Flask应用程序上下文有关吗? (只是一个猜测。我真的不知道。)

0 个答案:

没有答案