我有一个应用程序(一小部分,不必要的部分被跳过):
# -*- coding: utf-8 -*-
import tornado.web
import tornado.httpserver
import tornado.ioloop
import tornado.websocket
import db_util # pg utility import
class SampleWebSocket(tornado.websocket.WebSocketHandler):
def open(self, *args, **kwargs):
print u"open Websocket"
do_init_stuff()
def on_message(self, data):
print u"%s BASE DATA RECIEVED:"
print data
do_on_message_stuff()
def on_close(self):
print u"WebSocket closed"
do_on_close_stuff()
def check_origin(self, origin):
# Allow connect from all domains
return True
def make_app(_settings):
routes = [
(r"/chat/sample/", handlers.SampleWebSocket),
]
app = tornado.web.Application(routes)
app.db = db_util.ConnectionRegistry()
return app
if __name__ == "__main__":
app = make_app()
port = 5001
app.db = db_util.ConnectionRegistry()
print " *** DEBUG:False, Starting Chat at port: %s" % port
server = tornado.httpserver.HTTPServer(app)
server.bind(port)
server.start(0) # actual number of cores == 2, so 2 subprocesses will be born
tornado.ioloop.IOLoop.instance().start()
我正在尝试与主管一起部署它。这是监督配置的一部分:
[program:chat]
directory=/home/me/chat
command=/home/me/venv/bin/python2.6 /home/me/chat/main.py
process_name=%(program_name)s_%(process_num)01d
redirect_stderr=true
stdout_logfile=/tmp/chat.out.log
numprocs=1
numprocs_start=5001
当我第一次使用$ supervisor -csupervisord.conf启动它时,它会启动并响应,但似乎supervisored无法控制龙卷风子进程,因此,如果我使用$ supervisorctl restart重新启动服务,则我仍然有龙卷风子进程存在,并绑定到5001端口。并且服务无法正确重新启动。
因此,是否存在某种方法可以通过多处理为龙卷风配置主管人员?
通常,如果您使用主管,则应使用主管的进程组,而不是龙卷风的多进程模式。增加numprocs
超级用户配置,并通过传递--port=%(process_num)s
命令行(在应用程序本身中定义了合适的选项),为每个进程提供不同的端口。您将需要像nginx或haproxy这样的代理来平衡各个进程(或者您可以使用文件描述符传递来共享一个端口,如https://gist.github.com/bdarnell/1073945所示,但这是高级的用法,我建议您使用代理代替)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句