TensorBoard源码实现探究

学过一些python网络编程的知识,对socket编程,https协议,以及web框架(flask)有一定的了解,所以想探究一下,TensorFlow的可视化工具TensorBoard是怎么搭建web服务的。

查看TensorBoard源码,从两个源码文件入手,分别是:

  1. program.py 这里就是设置了一些开始web服务的参数,例如端口(port):6006等
    在这里插入图片描述

  2. http_util.py 这里就用到了搭建web服务的werkzeug工具包
    在这里插入图片描述
    首先,先向大家介绍一下什么是 werkzeug,Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等。

例如我最常用的 Flask 框架就是一 Werkzeug 为基础开发的,这也是我要解析一下 Werkzeug 底层的原因,因为我想知道 Flask 的实现逻辑以及底层控制。这篇文章没有涉及到 Flask 的相关内容,只是以 Werkzeug 创建一个简单的 Web 应用,然后以这个 Web 应用为例剖析请求的处理以及响应的产生过程。

安装 werkzeug

直接 pip install Werkzeug

一个简单地 web 服务器

接下来,我们就开始使用 werkzeug 来创建一个简单的 web 服务器,这个服务器就仅仅返回 “Hello Werkzeug”,没有其他内容。

#!/usr/bin/env python
# encoding: utf-8
import os
 
from werkzeug.serving import run_simple
from werkzeug.wrappers import Request, Response
from werkzeug.wsgi import SharedDataMiddleware
 
class Shortly(object):
    def dispatch_request(self, request):
        return Response('Hello Werkzeug!')
 
    def wsgi_app(self, environ, start_response):
        request = Request(environ)
        response = self.dispatch_request(request)
        return response(environ, start_response)
 
    def __call__(self, environ, start_response):
        return self.wsgi_app(environ, start_response)
 
def create_app(with_static=True):
    app = Shortly()
    if with_static:
        app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
            '/static': os.path.join(os.path.dirname(__file__), 'static')
        })
    return app
 
if __name__ == '__main__':
    app = create_app()
    run_simple('127.0.0.1', 6666, app, use_debugger=True, use_reloader=True)

这段代码就实现了我说的功能,那么我们就来看看这段代码是怎么运作的?

首先,一切都回到最开始的地方开始,从 main 开始看起,可以发现 main 是非常简单地,只有一个初始化函数,然后就调用了 werkzeug 的 run_simple 函数。okay,我们可以发现这个 app 其实是一个 Shortly 对象,这个类就只实现了 3 个方法,一个是 dispatch_request, wsig_app, call ,就这么简单了,那我们就知道了,关键的代码都不是这些,应该是 run_simple.

参考

https://blog.csdn.net/perfectsorrow/article/details/80237066

猜你喜欢

转载自blog.csdn.net/qq_36653505/article/details/84727444