Every web application needs to do things asynchronously. Be it that messages need to be passed to other parts of the app, or tasks that take a non trivial amount of time (sending an email, calling into another web service). Ideally, you spin these tasks off from the thread that services the web request and count on them being done in good time, without holding up the request.
Until recently we used Resque for this. ...