tornado 多进程模式解析【基础】

这篇文章主要介绍了tornado 多进程模式解析,具有一定借鉴价值,需要的朋友可以参考下

本文主要研究的是tornado 多进程模式的相关内容,具体如下。

官方文档的helloworld实例中的启动方法:

?

1

if __name__ == "__main__":

application.listen(8888) # listen is a shortcut for bind and start ,这点看httpserver.py可以得知

?

1

tornado.ioloop.IOLoop.instance().start()

并且在listen中,将tornado启动为单进程模型。

所以要启动为多进程模型的方法为:摒弃listen方法

?

1

2

3

4

5

6

7

http_server = tornado.httpserver.HTTPServer(application)

 

  http_server.bind(options.port, options.host)

 

  http_server.start(num_processes=0) # tornado将按照cpu核数来fork进程

 

  tornado.ioloop.IOLoop.instance().start()

需要注意的一点是,要关掉debug模式,否则:

?

1

[E 110521 11:26:53 httpserver:229] Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start()

原因是,autoreload.py已经在http_server.start()之前就初始化了IOLoop,这个在httpserver.py中的class HTTPServer()和def start()的doc string中已经解释了。

总结

以上就是本文关于tornado 多进程模式解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

 

 

 

tornado 多进程模式

https://www.douban.com/note/217901726/

官方文档的helloworld实例中的启动方法:


if __name__ == "__main__": 

    application.listen(8888) # listen is a shortcut for bind and start ,这点看httpserver.py可以得知

    tornado.ioloop.IOLoop.instance().start()

并且在listen中,将tornado启动为单进程模型。

所以要启动为多进程模型的方法为:摒弃listen方法

 

    http_server = tornado.httpserver.HTTPServer(application)

    http_server.bind(options.port, options.host)

    http_server.start(num_processes=0) # tornado将按照cpu核数来fork进程

    tornado.ioloop.IOLoop.instance().start()

需要注意的一点是,要关掉debug模式,否则:
[E 110521 11:26:53 httpserver:229] Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start()
原因是,autoreload.py已经在http_server.start()之前就初始化了IOLoop,这个在httpserver.py中的class HTTPServer()和def start()的doc string中已经解释了。

 

 

 

 

tornado 多进程在ubuntu下通过bind启动,提示端口已占用
原创lvhaidong520 最后发布于2019-07-06 17:59:20 阅读数 75  收藏
展开
当前环境
Ubuntu:18.04

Python: 3.7.3

Tornado:6.0.2

根据CPU核数启动多进程
from tornado import ioloop
from tornado.web import Application
from tornado.httpserver import HTTPServer
 
from router import routers
from config import DEBUG, COOKIE_SECRET, HOST, PORT
 
 
app = Application(handlers=routers, debug=False, cookie_secret=COOKIE_SECRET)
server = HTTPServer(app)
server.bind(args.port or PORT, HOST)
server.start(num_processes=0)   # 根据CPU核数fork工作进程个数
ioloop.IOLoop.instance().start()
异常信息

原因
tornado server实例监听端口的方法有两种,bind和listen。

在Linux系统bind方法不起作用,需要使用listen;在macOS系统listen方法不起作用,需要使用bind。

上述监听端口代码需要改成: 

server.listen(args.port or PORT, HOST
————————————————
版权声明:本文为CSDN博主「lvhaidong520」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010856284/article/details/94878411

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值