"business condition" like ???? it seems a poor design to have a task, than watch it and if it "hangs for some reason" kill it abruptly not based on "task started a while ago"
PS: are you on windows ? signal management on win poses a lot of limitations. On Monday, March 11, 2013 10:27:17 PM UTC+1, dlypka wrote: > > timeout does not handle the case where it is discovered that the task > needs to be stopped ASAP due to a business condition. > For example the remote server may have limited connections available so if > a task runs into trouble, the process needs > to be killed ASAP to release the precious remote connection. That is the > case in my application. > > Even with a while loop, there will have to be a way get the win32 process > id of the python task for a given worker so the right one > can be killed. > > Looks like a better solution is for the task to have its own manager > thread that can listen for kill requests. > i.e. the scheduler tasks need to be written using a standard piece of > scaffolding code to provide fine-grained task management. > > On Monday, March 11, 2013 3:27:35 PM UTC-5, Niphlod wrote: >> >> having a single worker for each task can be daunting (well, you could >> wrap web2py.py -K appname in a never-ending loop so it's restarted as soon >> as it gets killed).... >> #!/bin/sh >> while true >> do web2py/web2py.py -K yourapp >> echo 'killed, restarting in a bit' >> sleep 2 >> done >> >> but I'm curious about your use-case. Why do you need to terminate a >> RUNNING task (that can't be accomplished using the timeout parameter)? >> >> >> On Monday, March 11, 2013 9:18:48 PM UTC+1, dlypka wrote: >>> >>> Thanks for the quick reply. >>> I suppose a workaround is to have a separate worker for each task. >>> The I can TERMINATE the worker. >>> >>> A suggestion: can you suggest some standard python scaffolding to >>> include in each >>> task function to make it listen for a kill signal / message? >>> >>> On Monday, March 11, 2013 3:05:21 PM UTC-5, Niphlod wrote: >>>> >>>> once the task is inserted you should not change it's values unless its >>>> in the QUEUED status (technically the ASSIGNED works too, but it's NOT >>>> recommended). >>>> there's no way for the scheduler to terminate a specific task once the >>>> task is started, unless you KILL the worker (setting the worker to >>>> TERMINATE will kill the worker as soon as the RUNNING task is finished). >>>> PS: if you need to execute a task n times, use the repeat argument. >>>> using time.sleep(something) in a task has the side-effect of NOT returning >>>> to the main loop to execute potentially new QUEUED tasks (every scheduler >>>> process is allowed to process a single task at a time). >>>> if you need to limit the time the task runs, use the timeout parameter. >>>> >>>> If something is not clear please ask. >>>> >>>> On Monday, March 11, 2013 8:04:52 PM UTC+1, dlypka wrote: >>>>> >>>>> >>>>> I need a way to terminate a specific Scheduled Task while it is >>>>> RUNNING. >>>>> I tried using Admin Database Admin to update the >>>>> scheduler_task.stop_time to a time close to now while it was running. >>>>> But the task continued for several more minutes and COMPLETED its >>>>> normal 5 minute run. >>>>> The task calls time.sleep(300) to make it run for 5 minutes. >>>>> >>>>> I guess the Scheduler is not looking at the db values every 3 seconds. >>>>> Is it just checking the in memory task object properties? >>>>> >>>>> Is there a way to update the in memory object properties of a task >>>>> while it is running? >>>>> >>>>> Thanks. >>>>> >>>> -- --- 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/groups/opt_out.

