无法运行多个龙卷风过程

时间:2016-03-20 19:04:16

标签: python nginx tornado

我开发了龙卷风应用程序但是当多个用户登录时,它似乎记录了以前的用户。我来自Apache背景,所以我认为龙卷风要么产生一个线程,要么分叉一个进程,但看起来并非如此。

为了缓解这种情况,我安装了nginx并将其配置为反向代理,以将传入的请求转发到可用的龙卷风进程。 Nginx似乎工作正常但是当我尝试使用不同的端口启动多个龙卷风进程时,我收到以下错误:

http_server.listen(options.port)
File "/usr/local/lib/python2.7/dist-packages/tornado/tcpserver.py", line 125, in listen
sockets = bind_sockets(port, address=address)
File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 145, in bind_sockets
sock.bind(sockaddr)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use

基本上,我尝试在不同的端口上启动每个进程。

我读过我应该使用主管来管理我的龙卷风流程,但我认为这更方便了。目前我想知道问题是否与我的实际龙卷风代码或我的设置有关?我的python代码如下所示:

from tornado.options import define, options
define("port", default=8000, help="run on given port", type=int)
....
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

我的处理程序一切正常,当我去localhost时我可以访问该网站:8000只需要一双新鲜的眼睛。 ;)

2 个答案:

答案 0 :(得分:0)

我解决了这个问题。我的.sh文件尝试使用以下命令启动多个进程:

python initpumpkin.py --port=8000&
python initpumpkin.py --port=8001&
python initpumpkin.py --port=8002&
python initpumpkin.py --port=8003&

不幸的是我没有告诉龙卷风来解析命令行选项所以我总是得到该地址总是在使用错误,因为端口'8000'被定义为我的默认端口,所以每次都会尝试侦听该端口。为了缓解这种情况,请确保在main之后声明tornado.options.parse_command_line():

if __name__ == "__main__":
    tornado.options.parse_command_line()

然后使用任何参数从CLI运行。

答案 1 :(得分:0)

您是否尝试过以这种方式启动服务器:

server = tornado.httpserver.HTTPServer(app)
server.bind(port, "0.0.0.0")
server.start(0)

IOLoop.current().start()

server.start获取一个参数,其中0告诉Tornado在计算机上为每个CPU使用一个进程