you're probably missing the part where a task gets executed in a "shell-like" environment, whose most-notable difference is that inside a task you have to manually db.commit().
While a db.commit() is ensured "automatically" at the end of every request in the normal web environment by web2py, inside a task you may want to commit() or rollback() "as per requirements". That's the reason why queue_task() doesn't enforce a db.commit() .... in a normal environment your task queued by the "web" is committed only if there aren't exceptions. Perfect! (you don't want to queue tasks if the controller function that generated it threw an exception) A "tasks fired by tasks" is a perfect example: what if you want to queue your tasks only if the "parent" completed correctly ? e.g. def parent_task(): ... do_something ... queue_task(child_task, ...) 1/0 ...whoopsie! def child_task(): """I must run only if parent_task() completed correctly""" ... do_something() so, just db.commit() at the end of parent_task and you're good to go. PS: restating over and over (in case it's not clear). Whatever you do in your tasks involving a database must be commit()ed. This involves queueing new tasks cause you're using the database to queue them. -- --- 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 web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.