当应用程序在 Heroku 上运行时,有没有办法使用 APScheduler 添加作业?

问题描述 投票:0回答:1

我正在尝试构建一个 Flask 应用程序,允许用户安排任务在一天中的特定时间运行。 Heroku 上有很多关于使用 APScheduler 调度任务的教程,但是它们都要求您在部署应用程序之前定义任务。我希望能够在运行时调用scheduler.add_job()。这可能吗?

我尝试按照https://devcenter.heroku.com/articles/clock-processes-python并创建一个clock.py文件,但这不是我想要的,因为我希望能够在应用程序时安排作业正在运行,但此方法不允许这样做。

我有一个想法,使用 MongoDB 并在 Flask 应用程序中创建一个端点,该端点在数据库中存储一个新作业,然后在我的 Clock.py 中,我可以使用 MongoDBJobStore 自动检测新作业,但我不知道该怎么做。

任何想法表示赞赏!

mongodb flask heroku apscheduler
1个回答
0
投票

只要应用程序循环运行,您就可以在运行时调用

add_job()
。 例如,您正在运行 Flask,它应该已经处于循环状态。

如果您使用 Flask 并公开 API 应用程序,您可以让用户在前端/POST 事件上对任务进行排队。然后在 Flask 上只需简单收集并使用相应参数运行

add_job()

更好地检查文档这里

下面的示例是 FastAPI 的代码片段:

@router.post("/queue")
async def queue_task(
    value: Annotated[str | None, Form()] = None
)
    # your code goes here

    # schedule your task here
    scheduler.add_job(
        func=func_name,
#        args=[]
#        kwargs={"key": value},
#        executor="processpool", # need if you want to execute this on other pool, make sure you have setup it first
        # etc. args
    )
© www.soinside.com 2019 - 2024. All rights reserved.