Using Supervisor to Manage Tornado Processes
As we foreshadowed in Using Nginx as a Reverse Proxy, we will be running many instances of our Tornado application to take advantage of modern multiprocessor and multicore server architecture. Most anecdotal reports from deployment teams recommend running one Tornado process per core. As we know, however, the plural of anecdote is not data, so your results may vary. In this section, we will discuss strategies for managing many Tornado instances on a UNIX system.
So far, we’ve run the Tornado server from the command line with a
command like $
. In long-term production
deployments however, this is unmanageable. Because we are running a
separate Tornado process for each CPU core, there are several processes to
monitor and control. The supervisor
daemon can help us with this task.python main.py
--port=8000
Supervisor is designed to launch at boot time and start the processes listed in its configuration file. Here, we will look at Supervisor configuration to manage the four Tornado instances we referenced as upstream hosts in our Nginx configuration. Typically supervisord.conf contains global configuration directives, and will load additional configuration files from a conf.d directory. Example 8-4 shows a configuration file for the Tornado processes we want to start.
Example 8-4. tornado.conf
[group:tornadoes] programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003 [program:tornado-8000] command=python /var/www/main.py --port=8000 directory=/var/www ...