Tornado和multiprocessing和fork

import tornado
import tornado.web
import os
import socket
import multiprocessing
import time

l = multiprocessing.Manager().list()

port = 8888

class IndexHandler(tornado.web.RequestHandler):
	def initialize(self,child_pid):
		self.child_pid = child_pid
	def get(self):
		global l
		s='hello client, child pid = %d'%self.child_pid
		self.write(s)
		print(l)

def server(child_pid):
	sockets = tornado.netutil.bind_sockets(port,family = socket.AF_INET)
	app = tornado.web.Application([(r"/", IndexHandler,{'child_pid':child_pid}),])
	httpd = tornado.httpserver.HTTPServer(app)
	httpd.add_sockets(sockets)
	tornado.ioloop.IOLoop.current().start()

def child_process():
	global l
	print(os.getpid())
	while True:
		l.append(os.getpid())
		time.sleep(10)
		pass
	pass
def main():
	pid = os.fork()
	if pid == 0:
		child_process()
	else:
		server(pid)

if __name__ == '__main__':
	main()

1、原本是通过tornado建立服务器,然后接收数据,交给另一个进程处理。用multiprocessing建立进程的话,主进程必须得join,因为全局进程共享变量l会因为主进程的结束而结束。现在用了fork(),tornado作为主进程,另一个程序作为子进程。

2、tornado中,可以通过tornado.web.Application([(r"/", IndexHandler,{'child_pid':child_pid}),]),以及def initialize(self,child_pid),进行传参数,例子中就是传递子进程的pid给tornado,这样,tornado就可以通过psutil库里的相关函数对子进程唤醒或阻塞。

3、fork后,全局进程共享变量l,并没有拷贝一份,应该是进程变量不会受到影响吧。

### Tornado Spring Boot 的特点对比 #### 架构与设计哲学 Tornado 是一种基于 Python 编写的异步网络库,特别适合处理长时间连接的操作[^1]。而 Spring Boot 则是一个用于简化新 Spring 应用程序创建过程的框架,它提供了许多开箱即用的功能来帮助开发者快速启动项目,并且主要面向 Java 开发者社区。 #### 性能表现 对于高并发场景下的短请求响应时间,Tornado 表现优异;其事件驱动架构允许服务器维持大量未完成的连接,在 WebSockets 或 Comet 风格的应用中有显著优势[^2]。相比之下,Spring Boot 更侧重于企业级应用开发中的稳定性安全性,通过优化 JVM 上运行的服务性能以及利用多线程模型实现高效的 I/O 处理能力。 #### 易用性与学习曲线 由于采用了简洁的设计理念并内置了许多实用工具类支持包,使得使用 Spring Boot 创建 RESTful API 变得非常简单快捷[^3]。然而,Python 社区推崇的是更灵活自由的方式编写代码,因此初学者可能会觉得 Tornado 文档相对较少,上手难度稍大一些。 #### 生态系统支持程度 Java 拥有庞大的生态系统丰富的第三方库资源可供选择,这无疑给采用 Spring Boot 进行大型复杂系统的构建带来了极大便利。与此同时,尽管 Python 同样具备广泛适用性的特性集,但在某些特定领域内可能不如前者那样成熟完善[^4]。 #### 使用案例分析 - **Tornado**: 实时聊天室、在线游戏大厅等需要频繁交互更新状态信息的地方; - **Spring Boot**: 微服务架构下各个独立模块之间的通信接口定义及其实现部分,如电商网站后台管理系统等功能组件间的数据交换逻辑描述。 ```python import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") def make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start() ``` ```java @RestController public class HelloController { @GetMapping("/") public String hello() { return "Hello, World!"; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值