A responsive app should always be ready to respond to the user, regardless of any background processing that may be happening. This is especially true for geoprocessing applications which often entail long-running processes. To keep the app responsive, the thread that processes user interaction must always be ready to respond, and never be blocked. To keep the app available, the thread that handles web requests must always have the capacity for new requests.
I write a case study on how to asynchrony in general, and Celery in particular, to perform high performance geoprocessing on the web. Read the full article on the Azavea blog here.