2016-03-20 7 views
0

Ich habe eine Tornado-App entwickelt, aber wenn sich mehr als ein Benutzer anmeldet, scheint er den vorherigen Benutzer auszuloggen. Ich komme aus einem Apache-Hintergrund, also dachte ich, Tornado würde entweder einen Thread oder einen Fork spawnen, aber das scheint nicht so zu sein.kann nicht mehr als einen Tornado-Prozess ausführen

Um dies zu mindern, habe ich Nginx installiert und es als Reverse-Proxy konfiguriert, um eingehende Anfragen an einen verfügbaren Tornado-Prozess weiterzuleiten. Nginx scheint aber gut zu funktionieren, wenn ich versuche, mehr als einen Tornado-Prozess starten einen anderen Port verwende ich die folgende Fehlermeldung erhalten:

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 

ich das bekomme im Grunde für jeden Prozess, den ich versuche, auf einem anderen Port zu starten.

Ich habe gelesen, dass ich Supervisor verwenden sollte, um meine Tornado-Prozesse zu verwalten, aber ich denke, das ist eher eine Bequemlichkeit. Im Moment frage ich mich, ob das Problem mit meinem tatsächlichen Tornado-Code oder meinem Setup irgendwo zu tun hat? Mein Python-Code sieht wie folgt aus:

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() 

meine Handler alle arbeiten gut und ich kann auf die Website zugreifen, wenn ich auf localhost gehen: 8000 brauchen nur ein paar frische Augen bitte. ;)

Antwort

0

Nun, ich löste das Problem. Ich .Sh Datei hatte, die mit mehreren Prozesse zu starten versucht:

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

leider habe ich nicht Tornado sagte die Befehlszeilenoptionen zu analysieren, damit ich immer diese Adresse immer im Einsatz Fehler, da Port ‚8000‘ bekommen würde, war definiert als mein Standard-Port, so würde es versuchen, jedes Mal auf diesen Port zu hören. Um dies zu mildern stellen Sie sicher, zu erklären tornado.options.parse_command_line() nach der Haupt: mit dem, was Argumente

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

dann von der CLI laufen.

0

Haben Sie versucht, Ihren Server auf diese Weise beginnen:

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

IOLoop.current().start() 

server.start einen Parameter für die Anzahl der Prozesse führt, wo 0Tornado ein Prozess pro CPU auf der Maschine zu verwenden, sagt

Verwandte Themen