-
-
Save jholster/2290574 to your computer and use it in GitHub Desktop.
import tornado.web | |
import tornado.httpserver | |
import tornado.ioloop | |
class MainHandler(tornado.web.RequestHandler): | |
def get(self): | |
self.write("Greetings from the instance %s!" % tornado.process.task_id()) | |
app = tornado.web.Application([ | |
(r"/", MainHandler), | |
]) | |
if __name__ == "__main__": | |
server = tornado.httpserver.HTTPServer(app) | |
server.bind(8888) | |
server.start(0) # autodetect number of cores and fork a process for each | |
tornado.ioloop.IOLoop.instance().start() |
Thank you very much
This is what i was looking for start(0)
from tornadoweb docs
start(num_processes=1)[source]
Starts this server in the IOLoop.
By default, we run the server in this process and do not fork any additional child process.
If num_processes is None or <= 0, we detect the number of cores available on this machine and fork that number of child processes. If num_processes is given and > 1, we fork that specific number of sub-processes.
Since we use processes and not threads, there is no shared memory between any server code.
Note that multiple processes are not compatible with the autoreload module (or the debug=True option to tornado.web.Application). When using multiple processes, no IOLoops can be created or referenced until after the call to TCPServer.start(n).
The document states that it is not the advised way to fork the tornado processes.
A better way would be set up several independent tornado processes and load balanced by Nginx.
@mkyung do you have a link to that?
I'm confused by this: server.start(0)
Aren't you still running one instance of the IOLoop? What advantage do you get by forking?