Can I use your text verbatim for the book? On Saturday, 29 September 2012 18:26:30 UTC-5, Peter Etchells wrote: > > GAE offers a taskqueue module to allow tasks to be run in background. Each > item added to the taskqueue is a redirect to a web2py URL (or any GAE URL) > with parameters (equivalent to web2py request.vars). The task is scheduled > and executed in background by the GAE environment. > > This is useful if you want to do additional operations that can complete > after the current action is completed (eg updating a ratings or popularity > table), and you do not want to slow down the current action. The GAE SDK > supports taskqueue and executes tasks in much the same way as a production > GAE application. > > GAE taskqueue is not available in a non-GAE environment. > > The following is a simple working example: > > 1. > 2. > 3. > 4. > 5. > 6. > 7. > 8. > 9. > 10. > 11. > > > def gen_task(): > from google.appengine.api import taskqueue > # .... do some things, then > taskqueue.add(url=URL('task_do'), > params=dict(old='original text', new='new text')) > return dict(.....) > > def task_do(): > db.mytable.insert(old=request.vars['old'], new=request.vars['new']) > > concepts > > - action gen_task is executed by a user. as well as other possible > operations, this action adds a task to the task queue. This task will call > action 'task_do', with vars as in the params dictionary. > - task_do is executed by the GAE environment after gen_task, at a time > determined by the GAE environment. This may be while other application > actions are occurring. > - task_do inserts a record in a table, but may carry out any valid > operations. > - the web2py helper URL builds the url of the target action as shown > in this example if the action is in the same controller. The target action > may be in a different controller or even different application (in fact > any > valid url). Use the c and a arguments to specify a web2py target action in > a different controller/application. > > *Note* taskqueue.add(URL('myfunction', vars=dict(var1=v1, var2=v2, ...)) > will not work as the variables must be passed through the tasqueue.add > params keyword argument . > >
--