The next issue is a big one: It's absolutely crucial to be able to operate 
in UTC mode. Without the ability to store and process schedule data in 
universal time, there's no way to ensure a schedule's integrity across 
multiple servers, or even on the same server if time settings are changed. 
It's also essential for being able to perform accurate 
server-to-client/client-to-server time conversions. In my experience, the 
only sane way to handle scheduling is to work exclusively in UTC and avoid 
local server time altogether. 

Niphlod - I have experience with this and can help with the conversion 
functions. If you want to hash through this together you can reach me at 
ykess...@appgrinders.com.


On Sunday, August 5, 2012 12:53:55 PM UTC-4, Yarin wrote:
>
> Great, let's get these issues ironed out now- I know the 'repeats' param 
> was part of the older scheduler before you started work on it, but as far 
> as I know it's been experimental up until now and and so future-readiness 
> should trump backwards compatibility at this point. I hope...
>
> I'll be testing all day- I'll bring up any more issues as I find them. 
> Thanks for being so responsive, and good work--
>
> On Sunday, August 5, 2012 12:25:48 PM UTC-4, Niphlod wrote:
>>
>> I like the idea.
>> The only problem is having people changing repeat to repeats if they're 
>> using the scheduler included into the stable version.
>> I don't think that the implementation would be cumbersome, I'll try to 
>> compose a patch and send it to Massimo ASAP.
>>
>> On Sunday, August 5, 2012 6:16:55 PM UTC+2, Yarin wrote:
>>>
>>> Let me go further:
>>>
>>> Field('repeats_failed', 'integer', default=1, comment="0=unlimited"),
>>>
>>> Should really be:
>>>
>>> Field('retry_failed', 'integer', default=0, comment="-1=unlimited"),
>>>
>>> According to the docs, this param is supposed to "set how many times the 
>>> function can raise an exception ... and be queued again instead of stopping 
>>> in FAILED status with the parameter." If that's the case, then 0 should 
>>> mean that we don't want the function to be queued again if it fails. 1 
>>> should mean give it one more try. This is a lot clearer than having the 
>>> number refer to the number of failures allowed.
>>>
>>>
>>>
>>>
>>>
>>> On Sunday, August 5, 2012 11:55:19 AM UTC-4, Yarin wrote:
>>>>
>>>> Ok this is clearer to me- I'll see if I can clarify it in the docs..
>>>>
>>>> On to the next issue, this one regarding implementation:
>>>>
>>>> I think the following parameters need to be renamed:
>>>>
>>>>    1. 'repeats' should be 'repeat'
>>>>    2. 'repeats_failed' should be 'retry_failed'
>>>>
>>>> Let me explain:
>>>>
>>>>    1. 'repeat' is a command, whereas 'repeats' sounds like a result. 
>>>>    Because the task record stores both arguments and results, this becomes 
>>>>    confusing.
>>>>    2. 'repeats_failed' is even worse, because it sounds like a result 
>>>>    (like 'times_failed', which *is* a result), and because it is a 
>>>>    misnomer. We are not instructing it to repeat failures, but to *
>>>>    retry* them. Moreover, it needs to be clear that this value is 
>>>>    completely distinct from the 'repeat' value- i.e. retries will be 
>>>> applied 
>>>>    to every execution attempt, regardless of whether those attempts will 
>>>> be 
>>>>    repeated or not.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Sunday, August 5, 2012 11:13:38 AM UTC-4, Niphlod wrote:
>>>>>
>>>>> Hi Yarin, Thank you for testing it!
>>>>> A QUEUED task is not picked up by a worker, it is first ASSIGNED to a 
>>>>> worker that can pick up only the ones ASSIGNED to him. The "assignment" 
>>>>> phase is important because:
>>>>> - the group_name parameter is honored (task queued with the group_name 
>>>>> 'foo' gets assigned only to workers that process 'foo' tasks (the 
>>>>> group_names column in scheduler_workers))
>>>>> - DISABLED, KILL and TERMINATE workers are "removed" from the 
>>>>> assignment alltogether 
>>>>> - in multiple workers situations the QUEUED tasks are split amongst 
>>>>> workers evenly, and workers "know in advance" what tasks they are allowed 
>>>>> to execute (the assignment allows the scheduler to set up n "independant" 
>>>>> queues for the n ACTIVE workers)
>>>>>
>>>>>
>>>>> On Sunday, August 5, 2012 4:54:22 PM UTC+2, Yarin wrote:
>>>>>>
>>>>>> @Niphlod- First of all, thanks for taking this on. An effective 
>>>>>> scheduler is critically important to us, and I'll be glad to help out in 
>>>>>> any way. 
>>>>>>
>>>>>> I've downloaded the test app and am making corrections to the 
>>>>>> documentation (per your request) for clarity, grammar, etc. 
>>>>>>
>>>>>> On thing I'm stuck on is when the ASSIGNED status comes into play. 
>>>>>> According to the docs:
>>>>>>
>>>>>>> "Tasks with no stop_time set or picked up BEFORE stop_time are 
>>>>>>> ASSIGNED to a worker. When a workers picks up them, they become 
>>>>>>> RUNNING." 
>>>>>>
>>>>>> - This doesn't make sense to me. If a QUEUED task is picked up by a 
>>>>>> worker, its status changes to RUNNING. So at what point is it ASSIGNED?
>>>>>>
>>>>>>
>>>>>> On Thursday, July 12, 2012 4:36:38 PM UTC-4, Niphlod wrote:
>>>>>>>
>>>>>>> Hello everybody, in the last month several changes were commited to 
>>>>>>> the scheduler, in order to improve it.
>>>>>>> Table schemas were changed, to add some features that were missed by 
>>>>>>> some users.
>>>>>>> On the verge of releasing web2py v.2.0.0, and seeing that the 
>>>>>>> scheduler potential is often missed by regular web2py users, I created 
>>>>>>> a 
>>>>>>> test app with two main objectives: documenting the new scheduler and 
>>>>>>> test 
>>>>>>> the features.
>>>>>>>
>>>>>>> App is available on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests). All you need is 
>>>>>>> download the trunk version of web2py, download the app and play with it.
>>>>>>>
>>>>>>> Current features:
>>>>>>> - one-time-only tasks
>>>>>>> - recurring tasks
>>>>>>> - possibility to schedule functions at a given time
>>>>>>> - possibility to schedule recurring tasks with a stop_time
>>>>>>> - can operate distributed among machines, given a database reachable 
>>>>>>> for all workers
>>>>>>> - group_names to "divide" tasks among different workers
>>>>>>> - group_names can also influence the "percentage" of assigned tasks 
>>>>>>> to similar workers
>>>>>>> - simple integration using modules for "embedded" tasks (i.e. you 
>>>>>>> can use functions defined in modules directly in your app or have them 
>>>>>>> processed in background)
>>>>>>> - configurable heartbeat to reduce latency: with sane defaults and 
>>>>>>> not toooo many tasks queued normally a queued task doesn't exceed 5 
>>>>>>> seconds 
>>>>>>> execution times
>>>>>>> - option to start it, process all available tasks and then die 
>>>>>>> automatically
>>>>>>> - integrated tracebacks
>>>>>>> - monitorable as state is saved on the db
>>>>>>> - integrated app environment if started as web2py.py -K
>>>>>>> - stop processes immediately (set them to "KILL")
>>>>>>> - stop processes gracefully (set them to "TERMINATE")
>>>>>>> - disable processes (set them to "DISABLED")
>>>>>>> - functions that doesn't return results do not generate a 
>>>>>>> scheduler_run entry
>>>>>>> - added a discard_results parameter that doesn't store results "no 
>>>>>>> matter what"
>>>>>>> - added a uuid record to tasks to simplify checkings of "unique" 
>>>>>>> tasks
>>>>>>> - task_name is not required anymore
>>>>>>> - you can skip passing the function to the scheduler istantiation: 
>>>>>>> functions can be dinamically retrieved in the app's environment
>>>>>>>
>>>>>>> So, your mission is:
>>>>>>> - test the scheduler with the app and familiarize with it
>>>>>>> Secondary mission is:
>>>>>>> - report any bug you find here or on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests/issues)
>>>>>>> - propose new examples to be embedded in the app, or correct the 
>>>>>>> current docs (English is not my mother tongue) 
>>>>>>>
>>>>>>> Once approved, docs will be probably embedded in the book (
>>>>>>> http://web2py.com/book)
>>>>>>>
>>>>>>> Feel free to propose features you'd like to see in the scheduler, I 
>>>>>>> have some time to spend implementing it.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>> On Sunday, August 5, 2012 11:13:38 AM UTC-4, Niphlod wrote:
>>>>>
>>>>> Hi Yarin, Thank you for testing it!
>>>>> A QUEUED task is not picked up by a worker, it is first ASSIGNED to a 
>>>>> worker that can pick up only the ones ASSIGNED to him. The "assignment" 
>>>>> phase is important because:
>>>>> - the group_name parameter is honored (task queued with the group_name 
>>>>> 'foo' gets assigned only to workers that process 'foo' tasks (the 
>>>>> group_names column in scheduler_workers))
>>>>> - DISABLED, KILL and TERMINATE workers are "removed" from the 
>>>>> assignment alltogether 
>>>>> - in multiple workers situations the QUEUED tasks are split amongst 
>>>>> workers evenly, and workers "know in advance" what tasks they are allowed 
>>>>> to execute (the assignment allows the scheduler to set up n "independant" 
>>>>> queues for the n ACTIVE workers)
>>>>>
>>>>>
>>>>> On Sunday, August 5, 2012 4:54:22 PM UTC+2, Yarin wrote:
>>>>>>
>>>>>> @Niphlod- First of all, thanks for taking this on. An effective 
>>>>>> scheduler is critically important to us, and I'll be glad to help out in 
>>>>>> any way. 
>>>>>>
>>>>>> I've downloaded the test app and am making corrections to the 
>>>>>> documentation (per your request) for clarity, grammar, etc. 
>>>>>>
>>>>>> On thing I'm stuck on is when the ASSIGNED status comes into play. 
>>>>>> According to the docs:
>>>>>>
>>>>>>> "Tasks with no stop_time set or picked up BEFORE stop_time are 
>>>>>>> ASSIGNED to a worker. When a workers picks up them, they become 
>>>>>>> RUNNING." 
>>>>>>
>>>>>> - This doesn't make sense to me. If a QUEUED task is picked up by a 
>>>>>> worker, its status changes to RUNNING. So at what point is it ASSIGNED?
>>>>>>
>>>>>>
>>>>>> On Thursday, July 12, 2012 4:36:38 PM UTC-4, Niphlod wrote:
>>>>>>>
>>>>>>> Hello everybody, in the last month several changes were commited to 
>>>>>>> the scheduler, in order to improve it.
>>>>>>> Table schemas were changed, to add some features that were missed by 
>>>>>>> some users.
>>>>>>> On the verge of releasing web2py v.2.0.0, and seeing that the 
>>>>>>> scheduler potential is often missed by regular web2py users, I created 
>>>>>>> a 
>>>>>>> test app with two main objectives: documenting the new scheduler and 
>>>>>>> test 
>>>>>>> the features.
>>>>>>>
>>>>>>> App is available on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests). All you need is 
>>>>>>> download the trunk version of web2py, download the app and play with it.
>>>>>>>
>>>>>>> Current features:
>>>>>>> - one-time-only tasks
>>>>>>> - recurring tasks
>>>>>>> - possibility to schedule functions at a given time
>>>>>>> - possibility to schedule recurring tasks with a stop_time
>>>>>>> - can operate distributed among machines, given a database reachable 
>>>>>>> for all workers
>>>>>>> - group_names to "divide" tasks among different workers
>>>>>>> - group_names can also influence the "percentage" of assigned tasks 
>>>>>>> to similar workers
>>>>>>> - simple integration using modules for "embedded" tasks (i.e. you 
>>>>>>> can use functions defined in modules directly in your app or have them 
>>>>>>> processed in background)
>>>>>>> - configurable heartbeat to reduce latency: with sane defaults and 
>>>>>>> not toooo many tasks queued normally a queued task doesn't exceed 5 
>>>>>>> seconds 
>>>>>>> execution times
>>>>>>> - option to start it, process all available tasks and then die 
>>>>>>> automatically
>>>>>>> - integrated tracebacks
>>>>>>> - monitorable as state is saved on the db
>>>>>>> - integrated app environment if started as web2py.py -K
>>>>>>> - stop processes immediately (set them to "KILL")
>>>>>>> - stop processes gracefully (set them to "TERMINATE")
>>>>>>> - disable processes (set them to "DISABLED")
>>>>>>> - functions that doesn't return results do not generate a 
>>>>>>> scheduler_run entry
>>>>>>> - added a discard_results parameter that doesn't store results "no 
>>>>>>> matter what"
>>>>>>> - added a uuid record to tasks to simplify checkings of "unique" 
>>>>>>> tasks
>>>>>>> - task_name is not required anymore
>>>>>>> - you can skip passing the function to the scheduler istantiation: 
>>>>>>> functions can be dinamically retrieved in the app's environment
>>>>>>>
>>>>>>> So, your mission is:
>>>>>>> - test the scheduler with the app and familiarize with it
>>>>>>> Secondary mission is:
>>>>>>> - report any bug you find here or on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests/issues)
>>>>>>> - propose new examples to be embedded in the app, or correct the 
>>>>>>> current docs (English is not my mother tongue) 
>>>>>>>
>>>>>>> Once approved, docs will be probably embedded in the book (
>>>>>>> http://web2py.com/book)
>>>>>>>
>>>>>>> Feel free to propose features you'd like to see in the scheduler, I 
>>>>>>> have some time to spend implementing it.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
On Sunday, August 5, 2012 12:53:55 PM UTC-4, Yarin wrote:
>
> Great, let's get these issues ironed out now- I know the 'repeats' param 
> was part of the older scheduler before you started work on it, but as far 
> as I know it's been experimental up until now and and so future-readiness 
> should trump backwards compatibility at this point. I hope...
>
> I'll be testing all day- I'll bring up any more issues as I find them. 
> Thanks for being so responsive, and good work--
>
> On Sunday, August 5, 2012 12:25:48 PM UTC-4, Niphlod wrote:
>>
>> I like the idea.
>> The only problem is having people changing repeat to repeats if they're 
>> using the scheduler included into the stable version.
>> I don't think that the implementation would be cumbersome, I'll try to 
>> compose a patch and send it to Massimo ASAP.
>>
>> On Sunday, August 5, 2012 6:16:55 PM UTC+2, Yarin wrote:
>>>
>>> Let me go further:
>>>
>>> Field('repeats_failed', 'integer', default=1, comment="0=unlimited"),
>>>
>>> Should really be:
>>>
>>> Field('retry_failed', 'integer', default=0, comment="-1=unlimited"),
>>>
>>> According to the docs, this param is supposed to "set how many times the 
>>> function can raise an exception ... and be queued again instead of stopping 
>>> in FAILED status with the parameter." If that's the case, then 0 should 
>>> mean that we don't want the function to be queued again if it fails. 1 
>>> should mean give it one more try. This is a lot clearer than having the 
>>> number refer to the number of failures allowed.
>>>
>>>
>>>
>>>
>>>
>>> On Sunday, August 5, 2012 11:55:19 AM UTC-4, Yarin wrote:
>>>>
>>>> Ok this is clearer to me- I'll see if I can clarify it in the docs..
>>>>
>>>> On to the next issue, this one regarding implementation:
>>>>
>>>> I think the following parameters need to be renamed:
>>>>
>>>>    1. 'repeats' should be 'repeat'
>>>>    2. 'repeats_failed' should be 'retry_failed'
>>>>
>>>> Let me explain:
>>>>
>>>>    1. 'repeat' is a command, whereas 'repeats' sounds like a result. 
>>>>    Because the task record stores both arguments and results, this becomes 
>>>>    confusing.
>>>>    2. 'repeats_failed' is even worse, because it sounds like a result 
>>>>    (like 'times_failed', which *is* a result), and because it is a 
>>>>    misnomer. We are not instructing it to repeat failures, but to *
>>>>    retry* them. Moreover, it needs to be clear that this value is 
>>>>    completely distinct from the 'repeat' value- i.e. retries will be 
>>>> applied 
>>>>    to every execution attempt, regardless of whether those attempts will 
>>>> be 
>>>>    repeated or not.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Sunday, August 5, 2012 11:13:38 AM UTC-4, Niphlod wrote:
>>>>>
>>>>> Hi Yarin, Thank you for testing it!
>>>>> A QUEUED task is not picked up by a worker, it is first ASSIGNED to a 
>>>>> worker that can pick up only the ones ASSIGNED to him. The "assignment" 
>>>>> phase is important because:
>>>>> - the group_name parameter is honored (task queued with the group_name 
>>>>> 'foo' gets assigned only to workers that process 'foo' tasks (the 
>>>>> group_names column in scheduler_workers))
>>>>> - DISABLED, KILL and TERMINATE workers are "removed" from the 
>>>>> assignment alltogether 
>>>>> - in multiple workers situations the QUEUED tasks are split amongst 
>>>>> workers evenly, and workers "know in advance" what tasks they are allowed 
>>>>> to execute (the assignment allows the scheduler to set up n "independant" 
>>>>> queues for the n ACTIVE workers)
>>>>>
>>>>>
>>>>> On Sunday, August 5, 2012 4:54:22 PM UTC+2, Yarin wrote:
>>>>>>
>>>>>> @Niphlod- First of all, thanks for taking this on. An effective 
>>>>>> scheduler is critically important to us, and I'll be glad to help out in 
>>>>>> any way. 
>>>>>>
>>>>>> I've downloaded the test app and am making corrections to the 
>>>>>> documentation (per your request) for clarity, grammar, etc. 
>>>>>>
>>>>>> On thing I'm stuck on is when the ASSIGNED status comes into play. 
>>>>>> According to the docs:
>>>>>>
>>>>>>> "Tasks with no stop_time set or picked up BEFORE stop_time are 
>>>>>>> ASSIGNED to a worker. When a workers picks up them, they become 
>>>>>>> RUNNING." 
>>>>>>
>>>>>> - This doesn't make sense to me. If a QUEUED task is picked up by a 
>>>>>> worker, its status changes to RUNNING. So at what point is it ASSIGNED?
>>>>>>
>>>>>>
>>>>>> On Thursday, July 12, 2012 4:36:38 PM UTC-4, Niphlod wrote:
>>>>>>>
>>>>>>> Hello everybody, in the last month several changes were commited to 
>>>>>>> the scheduler, in order to improve it.
>>>>>>> Table schemas were changed, to add some features that were missed by 
>>>>>>> some users.
>>>>>>> On the verge of releasing web2py v.2.0.0, and seeing that the 
>>>>>>> scheduler potential is often missed by regular web2py users, I created 
>>>>>>> a 
>>>>>>> test app with two main objectives: documenting the new scheduler and 
>>>>>>> test 
>>>>>>> the features.
>>>>>>>
>>>>>>> App is available on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests). All you need is 
>>>>>>> download the trunk version of web2py, download the app and play with it.
>>>>>>>
>>>>>>> Current features:
>>>>>>> - one-time-only tasks
>>>>>>> - recurring tasks
>>>>>>> - possibility to schedule functions at a given time
>>>>>>> - possibility to schedule recurring tasks with a stop_time
>>>>>>> - can operate distributed among machines, given a database reachable 
>>>>>>> for all workers
>>>>>>> - group_names to "divide" tasks among different workers
>>>>>>> - group_names can also influence the "percentage" of assigned tasks 
>>>>>>> to similar workers
>>>>>>> - simple integration using modules for "embedded" tasks (i.e. you 
>>>>>>> can use functions defined in modules directly in your app or have them 
>>>>>>> processed in background)
>>>>>>> - configurable heartbeat to reduce latency: with sane defaults and 
>>>>>>> not toooo many tasks queued normally a queued task doesn't exceed 5 
>>>>>>> seconds 
>>>>>>> execution times
>>>>>>> - option to start it, process all available tasks and then die 
>>>>>>> automatically
>>>>>>> - integrated tracebacks
>>>>>>> - monitorable as state is saved on the db
>>>>>>> - integrated app environment if started as web2py.py -K
>>>>>>> - stop processes immediately (set them to "KILL")
>>>>>>> - stop processes gracefully (set them to "TERMINATE")
>>>>>>> - disable processes (set them to "DISABLED")
>>>>>>> - functions that doesn't return results do not generate a 
>>>>>>> scheduler_run entry
>>>>>>> - added a discard_results parameter that doesn't store results "no 
>>>>>>> matter what"
>>>>>>> - added a uuid record to tasks to simplify checkings of "unique" 
>>>>>>> tasks
>>>>>>> - task_name is not required anymore
>>>>>>> - you can skip passing the function to the scheduler istantiation: 
>>>>>>> functions can be dinamically retrieved in the app's environment
>>>>>>>
>>>>>>> So, your mission is:
>>>>>>> - test the scheduler with the app and familiarize with it
>>>>>>> Secondary mission is:
>>>>>>> - report any bug you find here or on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests/issues)
>>>>>>> - propose new examples to be embedded in the app, or correct the 
>>>>>>> current docs (English is not my mother tongue) 
>>>>>>>
>>>>>>> Once approved, docs will be probably embedded in the book (
>>>>>>> http://web2py.com/book)
>>>>>>>
>>>>>>> Feel free to propose features you'd like to see in the scheduler, I 
>>>>>>> have some time to spend implementing it.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>> On Sunday, August 5, 2012 11:13:38 AM UTC-4, Niphlod wrote:
>>>>>
>>>>> Hi Yarin, Thank you for testing it!
>>>>> A QUEUED task is not picked up by a worker, it is first ASSIGNED to a 
>>>>> worker that can pick up only the ones ASSIGNED to him. The "assignment" 
>>>>> phase is important because:
>>>>> - the group_name parameter is honored (task queued with the group_name 
>>>>> 'foo' gets assigned only to workers that process 'foo' tasks (the 
>>>>> group_names column in scheduler_workers))
>>>>> - DISABLED, KILL and TERMINATE workers are "removed" from the 
>>>>> assignment alltogether 
>>>>> - in multiple workers situations the QUEUED tasks are split amongst 
>>>>> workers evenly, and workers "know in advance" what tasks they are allowed 
>>>>> to execute (the assignment allows the scheduler to set up n "independant" 
>>>>> queues for the n ACTIVE workers)
>>>>>
>>>>>
>>>>> On Sunday, August 5, 2012 4:54:22 PM UTC+2, Yarin wrote:
>>>>>>
>>>>>> @Niphlod- First of all, thanks for taking this on. An effective 
>>>>>> scheduler is critically important to us, and I'll be glad to help out in 
>>>>>> any way. 
>>>>>>
>>>>>> I've downloaded the test app and am making corrections to the 
>>>>>> documentation (per your request) for clarity, grammar, etc. 
>>>>>>
>>>>>> On thing I'm stuck on is when the ASSIGNED status comes into play. 
>>>>>> According to the docs:
>>>>>>
>>>>>>> "Tasks with no stop_time set or picked up BEFORE stop_time are 
>>>>>>> ASSIGNED to a worker. When a workers picks up them, they become 
>>>>>>> RUNNING." 
>>>>>>
>>>>>> - This doesn't make sense to me. If a QUEUED task is picked up by a 
>>>>>> worker, its status changes to RUNNING. So at what point is it ASSIGNED?
>>>>>>
>>>>>>
>>>>>> On Thursday, July 12, 2012 4:36:38 PM UTC-4, Niphlod wrote:
>>>>>>>
>>>>>>> Hello everybody, in the last month several changes were commited to 
>>>>>>> the scheduler, in order to improve it.
>>>>>>> Table schemas were changed, to add some features that were missed by 
>>>>>>> some users.
>>>>>>> On the verge of releasing web2py v.2.0.0, and seeing that the 
>>>>>>> scheduler potential is often missed by regular web2py users, I created 
>>>>>>> a 
>>>>>>> test app with two main objectives: documenting the new scheduler and 
>>>>>>> test 
>>>>>>> the features.
>>>>>>>
>>>>>>> App is available on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests). All you need is 
>>>>>>> download the trunk version of web2py, download the app and play with it.
>>>>>>>
>>>>>>> Current features:
>>>>>>> - one-time-only tasks
>>>>>>> - recurring tasks
>>>>>>> - possibility to schedule functions at a given time
>>>>>>> - possibility to schedule recurring tasks with a stop_time
>>>>>>> - can operate distributed among machines, given a database reachable 
>>>>>>> for all workers
>>>>>>> - group_names to "divide" tasks among different workers
>>>>>>> - group_names can also influence the "percentage" of assigned tasks 
>>>>>>> to similar workers
>>>>>>> - simple integration using modules for "embedded" tasks (i.e. you 
>>>>>>> can use functions defined in modules directly in your app or have them 
>>>>>>> processed in background)
>>>>>>> - configurable heartbeat to reduce latency: with sane defaults and 
>>>>>>> not toooo many tasks queued normally a queued task doesn't exceed 5 
>>>>>>> seconds 
>>>>>>> execution times
>>>>>>> - option to start it, process all available tasks and then die 
>>>>>>> automatically
>>>>>>> - integrated tracebacks
>>>>>>> - monitorable as state is saved on the db
>>>>>>> - integrated app environment if started as web2py.py -K
>>>>>>> - stop processes immediately (set them to "KILL")
>>>>>>> - stop processes gracefully (set them to "TERMINATE")
>>>>>>> - disable processes (set them to "DISABLED")
>>>>>>> - functions that doesn't return results do not generate a 
>>>>>>> scheduler_run entry
>>>>>>> - added a discard_results parameter that doesn't store results "no 
>>>>>>> matter what"
>>>>>>> - added a uuid record to tasks to simplify checkings of "unique" 
>>>>>>> tasks
>>>>>>> - task_name is not required anymore
>>>>>>> - you can skip passing the function to the scheduler istantiation: 
>>>>>>> functions can be dinamically retrieved in the app's environment
>>>>>>>
>>>>>>> So, your mission is:
>>>>>>> - test the scheduler with the app and familiarize with it
>>>>>>> Secondary mission is:
>>>>>>> - report any bug you find here or on github (
>>>>>>> https://github.com/niphlod/w2p_scheduler_tests/issues)
>>>>>>> - propose new examples to be embedded in the app, or correct the 
>>>>>>> current docs (English is not my mother tongue) 
>>>>>>>
>>>>>>> Once approved, docs will be probably embedded in the book (
>>>>>>> http://web2py.com/book)
>>>>>>>
>>>>>>> Feel free to propose features you'd like to see in the scheduler, I 
>>>>>>> have some time to spend implementing it.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>

-- 



Reply via email to