将Tensorboard服务器添加到Flask端点

2024-04-26 05:04:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Flask应用程序和一个Tensorboad服务器。是否有一种方法可以将Tensorboard服务器映射到Flask的一个端点,以便在我到达该端点时触发Tensorboard服务器

烧瓶应用

from flask import Flask, jsonify, request
app = Flask(__name__)

@app.route('/hello-world', methods=['GET', 'POST'])
def say_hello():
    return jsonify({'result': 'Hello world'})

if __name__ == "__main__":
    app.run(host=host, port=5000)

Tensorboard服务器代码:

from tensorboard.program import TensorBoard, setup_environment
def tensorboard_main(host, port, logdir):
    configuration = list([""])
    configuration.extend(["--host", host])
    configuration.extend(["--port", port])
    configuration.extend(["--logdir", logdir])

    tensorboard = TensorBoard()
    tensorboard.configure(configuration)
    tensorboard.main()

if __name__ == "__main__":
    host = "0.0.0.0"
    port = "7070"
    logdir = '/tmp/logdir'
    tensorboard_main(host, port, logdir)

我尝试在Flask应用程序中创建一个端点,然后添加了tensorboard_main(host, port, logdir),希望如果我点击了端点,那么服务器将启动,但我没有成功


Tags: namefrom服务器app应用程序hostflaskmain
2条回答

我发现,要将TensorBoard服务器集成到更大的Flask应用程序中,最好的方法是在WSGI级别组合应用程序

tensorboard.programAPI允许我们传递自定义服务器 班这里的签名是server_class应该是可调用的,它接受TensorBoard WSGI应用程序并返回满足TensorBoardServer接口的服务器

因此,守则是:

import os

import flask
import tensorboard as tb
from werkzeug import serving
from werkzeug.middleware import dispatcher

HOST = "0.0.0.0"
PORT = 7070

flask_app = flask.Flask(__name__)


@flask_app.route("/hello-world", methods=["GET", "POST"])
def say_hello():
    return flask.jsonify({"result": "Hello world"})


class CustomServer(tb.program.TensorBoardServer):
    def __init__(self, tensorboard_app, flags):
        del flags  # unused
        self._app = dispatcher.DispatcherMiddleware(
            flask_app, {"/tensorboard": tensorboard_app}
        )

    def serve_forever(self):
        serving.run_simple(HOST, PORT, self._app)

    def get_url(self):
        return "http://%s:%s" % (HOST, PORT)

    def print_serving_message(self):
        pass  # Werkzeug's `serving.run_simple` handles this


def main():
    program = tb.program.TensorBoard(server_class=CustomServer)
    program.configure(logdir=os.path.expanduser("~/tensorboard_data"))
    program.main()


if __name__ == "__main__":
    main()

您可以在这里使用多处理:为flask创建一个进程,为tensorboard创建另一个进程,然后在同一主机上运行它

代码:

from multiprocessing import Process
from tensorboard.program import TensorBoard
from flask import Flask, jsonify

app = Flask(__name__)


def tensorboard_main(host, port, logdir):
    configuration = list([""])
    configuration.extend([" host", host])
    configuration.extend([" port", port])
    configuration.extend([" logdir", logdir])

    tensorboard = TensorBoard()
    tensorboard.configure(configuration)
    tensorboard.main()


def flask_main(app, host, port):
    return app.run(host=host, port=port)


@app.route("/hello-world", methods=["GET", "POST"])
def say_hello():
    return jsonify({"result": "Hello world"})


if __name__ == "__main__":
    host = "0.0.0.0"
    port_for_tensorboard = "7070"
    port_for_flask = "5000"
    logdir = "/tmp/logdir"
    process_for_tensorboard = Process(target=tensorboard_main, args=(host, port_for_tensorboard, logdir))
    process_for_flask = Process(target=flask_main, args=(app, host, port_for_flask))
    process_for_tensorboard.start()
    process_for_flask.start()
    process_for_tensorboard.join()
    process_for_flask.join()

如果您想让tensorboard内部显示一些东西,那么您需要查看从一个进程到另一个进程的共享数据(认为它比这个示例更复杂)

相关问题 更多 >