3

我正在尝试在 Tornado 中运行多个进程,并尝试了在此线程上提出的建议:运行多个龙卷风进程

但是我的错误并没有消失。这是服务器文件。

服务器.py

import os
import sys
import tornado
#import pymongo

from tornado import ioloop, web, httpserver, websocket
from tornado.options import options

#Loading default setting files
import settings


#Motorengine - ODM for mongodb
#from motorengine import connect

app = tornado.web.Application(handlers=[
  (r'/', MainHandler),
  (r'/ws', WSHandler),
  (r'/public/(.*)', tornado.web.StaticFileHandler, {'path': options.public_path})],
  template_path=os.path.join(os.path.dirname(__file__), "app/templates"),
  static_path= options.static_path,
  autoreload=True,
  #images=os.path.join(os.path.dirname(__file__), "images"),
  debug=False)

if __name__ == '__main__':
   #read settings from commandline
    options.parse_command_line()
    server = tornado.httpserver.HTTPServer(app, max_buffer_size=1024*1024*201)
    server.bind(options.port)
    # autodetect cpu cores and fork one process per core
    server.start(0)

    #app.listen(options.port,xheaders=True)
    try:
        ioloop = tornado.ioloop.IOLoop.instance()
        #connect("attmlplatform", host="localhost", port=27017, io_loop=ioloop)
        print("Connected to database..")
        ioloop.start()
        print ('Server running on http://localhost:{}'.format(options.port))

    except KeyboardInterrupt:
        tornado.ioloop.IOLoop.instance().stop()

我已经基于预期它可能会触发实例并且我根本没有连接到数据库而注释掉了“连接”导入。这只是试图让服务器启动。

这是整个跟踪:

  File "server.py", line 52, in <module>
    server.start(0)
  File "/home/vagrant/anaconda3/envs/py34/lib/python3.4/site-packages/tornado/tcpserver.py", line 200, in start
    process.fork_processes(num_processes)
  File "/home/vagrant/anaconda3/envs/py34/lib/python3.4/site-packages/tornado/process.py", line 126, in fork_processes
    raise RuntimeError("Cannot run in multiple processes: IOLoop instance "
RuntimeError: Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start_processes()

任何建议都非常感谢!谢谢!

4

1 回答 1

7

autoreload与多进程模式不兼容。启用后autoreload,您必须只运行一个进程。

于 2015-09-11T15:49:43.560 回答