Upstart vs Supervisord to manage WSGI processes

I would suggest the use of supervisord. In my experience, it is friendlier and generally a smoother experience than runit or the venerable daemontools. Upstart is designed to replace the equally-venerable init process, while supervisord is specifically for managing things like WSGI, FastCGI, and the like. It is also pretty well-documented.

Because it is targeted at these types of scenarios, supervisord provides facilities for starting a specific number of processes, retry limits, custom signals, and various other useful bits (it even includes an XML-RPC interface.) Upstart provides the ability to interface with DBus, but this is unlikely in your scenario.