scheduler support coming .....

I think you didn't understand how models works / the scheduler works. Sorry 
for probably being redundant/naive, but just to check.....

in models belong:
def myfunction():
      ####whatever ####
from gluon.scheduler import Scheduler
myscheduler = Scheduler(db)


This line basically give you access to the scheduler api and the underlying 
tables.
Now, the following line 

myscheduler.queue_task(
          function='my_function',
          task_name = 'my_function',
          repeats = 0, # unlimited runs
          period = 300 # every 5 minutes    )

that can be shortened as well as 

myscheduler.queue_task(
          my_function, 
          repeats = 0, # unlimited runs
          period = 300 # every 5 minutes    )


does an actual insert on the scheduler_task table.

That should be used whenever you need to queue a NEW task. 
For repeating task, executing that line *one time only* it's all it's 
needed.....
So, if that's your only function, you can either use that line in a 
controller, or just use the appadmin inserting a *single* row on the 
scheduler_task table. Repeating functions will be repeated with just ONE 
row in the scheduler task (where the repeats column != 1) and they'll 
honour period. status, next_run_time, last_run_time, times_run, 
times_failed will be updated accordingly to executions on that *single* row.

NB: If the function returns something (and doesn't raise an exception), 
every execution will create a row in the *scheduler_run* table. 

I think that you have myscheduler.queue_task() in your models, and 
basically myfunction gets queued every time over and over (because models 
are executed at every request). That's why you have multiple records in the 
scheduler_task table and observing "strange" behaviours. 


Please let me know if this explanation made sense and if not, feel free to 
ask for further details.

On Monday, January 21, 2013 2:31:48 PM UTC+1, Stormcrow wrote:
>
> I have created a *scheduler.py *in /models/ which looks something like 
> this:
>
> def my_function():
> ### function body ###
>
> scheduler = Scheduler(db)
> scheduler.queue_task(
>           function='my_function',
>
> task_name = 'my_function',
>
> repeats = 0, # unlimited runs
>
> period = 300 # every 5 minutes
>
>     )
>
> The problem I'm seeing is that multiple tasks are being created in the 
> database for this one function at totally incorrect *next_run_time* with 
> respect to *start_time* and *period*. The multiple tasks created in the 
> db are also not at the correct time interval apart. In addition, changing 
> the repeat value to something other than zero has not effect, tasks 
> continue to be created and executed unrelentingly according to what I see 
> in the database.
>
> I am very keen to use the Scheduler, it seems like an elegant solution to 
> what I'm trying to do but with all these tasks sprouting and executing at 
> (what appears to be) random it is basically broken. Apologies if I 
> misunderstood the usage of the scheduler, I was proceeding as close as I 
> could to what I deciphered from the book. 
>
> Thanks in advance for the help!
>

-- 



Reply via email to