Web2Py - 配置调度程序
Web2Py - configure a scheduler
我有一个用 Web2Py 编写的应用程序,其中包含一些模块。我需要定期从模块中调用一些函数,比如说每天一次。我一直试图让一个调度程序为此目的工作,但我不确定如何让它正常工作。我已参考 this and this 开始。
我在models目录下有一个scheduler.py
class,里面的代码是这样的:
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
class中,我有这样的代码:
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/default/daily_periodic_task
我只看到 "None" 作为文本显示在屏幕上,我没有看到计划任务在我的数据库中产生的任何更改 table。
当我看到浏览器时:
http://127.0.0.1:8000/my_app/default/index
我收到一个错误 This web page is not available
,基本上表明我的应用程序从未启动。
当我使用 python web2py.py
正常启动我的应用程序时,我的应用程序加载正常,但我没有在我的数据库中看到计划任务产生的任何更改 table。
我无法弄清楚我在这里做错了什么以及如何通过 Web2Py 正确使用调度程序。基本上,我需要知道如何在后台正常 以及 计划任务 运行 正常启动我的应用程序。
在这方面的任何帮助将不胜感激。
运行 python web2py.py
启动内置网络服务器,使 web2py 能够响应 HTTP 请求(即,将网页提供给浏览器)。这与调度程序无关,不会导致任何计划任务 运行.
要运行计划任务,您必须通过以下方式启动一个或多个后台工作程序:
python web2py.py -K myapp
以上没有启动内置网络服务器,因此无法访问网页。它只是启动一个可用于执行计划任务的工作进程。
另请注意,以上内容实际上不会导致安排任何任务。要安排任务,您必须在 db.scheduler_task
table 中插入一条记录,您可以通过任何常用的插入记录方法(包括使用 appadmin
)或以编程方式通过 scheduler.queue_task
方法(这是您在 daily_periodic_task
操作中使用的方法)。
请注意,您可以通过以下方式同时启动内置 Web 服务器和调度程序工作进程:
python web2py.py -a yourpassword -K myapp -X
因此,要安排每日任务并使其实际执行,您需要 (a) 启动调度程序工作程序和 (b) 安排任务。您可以通过访问 daily_periodic_task
操作来安排任务,但请注意,您只需访问该操作一次,因为一旦安排了任务,它就会无限期地有效(假设您已设置 repeats=0
).
如果任务似乎没有运行,可能是任务本身有问题导致了错误。
我有一个用 Web2Py 编写的应用程序,其中包含一些模块。我需要定期从模块中调用一些函数,比如说每天一次。我一直试图让一个调度程序为此目的工作,但我不确定如何让它正常工作。我已参考 this and this 开始。
我在models目录下有一个scheduler.py
class,里面的代码是这样的:
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
class中,我有这样的代码:
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/default/daily_periodic_task
我只看到 "None" 作为文本显示在屏幕上,我没有看到计划任务在我的数据库中产生的任何更改 table。
当我看到浏览器时: http://127.0.0.1:8000/my_app/default/index
我收到一个错误 This web page is not available
,基本上表明我的应用程序从未启动。
当我使用 python web2py.py
正常启动我的应用程序时,我的应用程序加载正常,但我没有在我的数据库中看到计划任务产生的任何更改 table。
我无法弄清楚我在这里做错了什么以及如何通过 Web2Py 正确使用调度程序。基本上,我需要知道如何在后台正常 以及 计划任务 运行 正常启动我的应用程序。
在这方面的任何帮助将不胜感激。
运行 python web2py.py
启动内置网络服务器,使 web2py 能够响应 HTTP 请求(即,将网页提供给浏览器)。这与调度程序无关,不会导致任何计划任务 运行.
要运行计划任务,您必须通过以下方式启动一个或多个后台工作程序:
python web2py.py -K myapp
以上没有启动内置网络服务器,因此无法访问网页。它只是启动一个可用于执行计划任务的工作进程。
另请注意,以上内容实际上不会导致安排任何任务。要安排任务,您必须在 db.scheduler_task
table 中插入一条记录,您可以通过任何常用的插入记录方法(包括使用 appadmin
)或以编程方式通过 scheduler.queue_task
方法(这是您在 daily_periodic_task
操作中使用的方法)。
请注意,您可以通过以下方式同时启动内置 Web 服务器和调度程序工作进程:
python web2py.py -a yourpassword -K myapp -X
因此,要安排每日任务并使其实际执行,您需要 (a) 启动调度程序工作程序和 (b) 安排任务。您可以通过访问 daily_periodic_task
操作来安排任务,但请注意,您只需访问该操作一次,因为一旦安排了任务,它就会无限期地有效(假设您已设置 repeats=0
).
如果任务似乎没有运行,可能是任务本身有问题导致了错误。