I have a Bottle application that uses subprocesses to do most of the work for requests. For routes that return a single response, I do something like what\'s below.
In your last example, worker.doStuff() returns a generator, which is iterable. You can just return that (change yield to return). Bottle accept iterables as return values, as long es they yield byte or unicode strings.