首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在多个进程中运行: IOLoop实例已经初始化。在调用IOLoop.instance()之前不能调用start_processes()

无法在多个进程中运行: IOLoop实例已经初始化。在调用IOLoop.instance()之前不能调用start_processes()
EN

Stack Overflow用户
提问于 2015-09-11 10:20:14
回答 1查看 3.2K关注 0票数 3

我试图在“旋风”中运行多个进程,并尝试了在以下线程上提出的建议:run multiple tornado processess

但对我来说,错误并没有消失。这是服务器文件。

server.py

代码语言:javascript
复制
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()

我已经注释掉了“connect”导入,因为它可能会触发实例,而我根本没有连接到数据库。这只是想让服务器站起来。

这是所有的痕迹:

代码语言:javascript
复制
  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()

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

EN

回答 1

Stack Overflow用户

发布于 2015-09-11 15:49:43

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32521122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档