Web2Py -配置调度程序



我有一个用Web2Py编写的应用程序,其中包含一些模块。我需要定期从模块中调用一些函数,比如每天一次。我一直试图得到一个调度工作的目的,但我不知道如何让它正常工作。我已经参考了这个和这个来开始。

我在模型目录中有一个scheduler.py类,其中包含如下代码:

from gluon.scheduler import Scheduler
from Module1 import Module1
def daily_task():
module1 = Module1()
module1.action1(arg1, arg2, arg3)
daily_task_scheduler = Scheduler(db, tasks=dict(my_daily_task=daily_task))

default.py中,我有以下调度器代码:

def daily_periodic_task():
daily_task_scheduler.queue_task('daily_running_task', repeats=0, period=60)

[对于测试,我在60秒后运行它,否则每天我计划使用period=86400]

在我的Module1.py类,我有这样的代码:

   def action1(self, arg1, arg2, arg3):
    for row in db().select(db.table1.ALL):
        row.processed = 'processed'
        row.update_record()

我面临的一个问题是,我不清楚如何使这个调度器工作来自动处理action1每天的执行。当我使用类似于:python web2py.py -K my_app的语法启动我的应用程序时,它在控制台中显示:web2py Web Framework Created by Massimo Di Pierro, Copyright 2007-2015 Version 2.11.2-stable+timestamp.2015.05.30.16.33.24 Database drivers available: sqlite3, imaplib, pyodbc, pymysql, pg8000 starting single-scheduler for "my_app"...

然而,当我看到浏览器在:http://127.0.0.1:8000 my_app/违约/daily_periodic_task

我只看到"None"作为文本显示在屏幕上,我没有看到数据库表中计划任务产生的任何更改。

当我看到浏览器在:http://127.0.0.1:8000 my_app/违约指数

我得到一个错误,说明This web page is not available,基本上表明我的应用程序从未启动。

当我使用python web2py.py正常启动应用程序时,我的应用程序加载良好,但我没有看到数据库表中计划任务产生的任何更改。

我无法弄清楚我在这里做错了什么,以及如何正确使用Web2Py调度器。基本上,我需要知道如何才能正常启动我的应用程序以及在后台正常运行的计划任务。

运行python web2py.py启动内置web服务器,使web2py能够响应HTTP请求(即向浏览器提供网页)。这与调度程序无关,也不会导致任何计划任务正在运行。

要运行计划任务,必须通过以下命令启动一个或多个后台工作者:

python web2py.py -K myapp

上面的命令不会启动内置web服务器,因此不能访问网页。它只是启动一个可用于执行计划任务的工作进程。

另外,请注意,上述操作实际上不会导致任何任务被调度。要调度一个任务,你必须在db.scheduler_task表中插入一条记录,这可以通过任何插入记录的常用方法(包括使用appadmin)或通过scheduler.queue_task方法(这就是你在daily_periodic_task操作中使用的方法)来完成。

注意,你可以同时启动内置web服务器和调度工作进程:

python web2py.py -a yourpassword -K myapp -X

因此,要安排每日任务并使其实际执行,您需要(a)启动调度器工作程序,(b)安排任务。您可以通过访问daily_periodic_task操作来调度任务,但请注意,您只需要访问该操作一次,因为一旦任务被调度,它将无限期地保持有效(假设您已经设置了repeats=0)。

如果任务看起来没有工作,则可能是任务本身出了问题导致了错误。

最新更新