never ever ever call a queue_task() in a model. models gets executed at
every request. just queue the task in a "protectedinitialsetup()"
controller and use it.
I have a similar approach for
rebuilding/reinitializing/requeueing/rechecking all tasks
in a controller (e.g. default.py)
def reinit_sched(protect=None):
delete.... bla bla ..... do stuff ... bla bla
sched.queue_task(foo)
sched.queue_task(bar)
etc etc etc
you can then easily call it with web2py.py -M -S
appname/default/reinit_sched
BTW: it's a little easy trick: every function with arguments can't be
called from any request coming in (so it's secured) .. and the -S parameter
can take not only the app name, but also the controller and the function to
execute...
On Thursday, March 3, 2016 at 8:57:46 PM UTC+1, Dave S wrote:
>
>
>
> On Thursday, March 3, 2016 at 10:37:30 AM UTC-8, Mohit Jain wrote:
>>
>> Hello,
>> I would like to know how can one delete rows from a web2py table
>> where if a specific field (a timestamp) is older than 24hours? I would like
>> this process to keep running in the background in fixed time-intervals
>> (every 5 minutes or so) and delete entries from the table where this field
>> is older than 24hours from the current time. I know using the Scheduler is
>> probably the correct way to go about it but I'm unable to figure out the
>> exact code to be written (the documentation has too many options and hence
>> a bit confusing). Looking for code samples! :)
>>
>>
> Pretty simple. You need a model file, say models/scheduler.py
>
> import datetime
>
> def cleantable():
> print "cleantable cleaning the table at %s" % (request.utc_now)
> backthen = datetime.strptime(request.utc_now) - datetime.timedelta(h=24)
> return backthen.isoformat() # stdout and the return value will be
> in the scheduler_run table, up to the limit in size
>
> ts = scheduler.task_status(db.scheduler_task.task_name == 'cleantable')
> if ts.status not in ["QUEUED", "RUNNING"] :
> scheduler.queue_task( "cleantable", start_time = ttime, period = 300,
> repeats=0)
>
>
>
> If you want a user event to trigger your task, move the queue_task call
> to a controller.
>
> The limit on stdout contents seems to be 128K
> <URL:https://groups.google.com/d/topic/web2py/PunI6ffg9xk/discussion>
>
>
> /dps
>
>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.