示例#1
0
    def _make_data_ingester(self):
        """Determines the right data ingester, starts it, and returns it."""
        flags = self.flags
        if flags.grpc_data_provider:
            ingester = server_ingester.ExistingServerDataIngester(
                flags.grpc_data_provider,
                channel_creds_type=flags.grpc_creds_type,
            )
            ingester.start()
            return ingester

        if flags.load_fast == "true":
            try:
                return self._start_subprocess_data_ingester()
            except server_ingester.NoDataServerError as e:
                msg = "Option --load_fast=true not available: %s\n" % e
                sys.stderr.write(msg)
                sys.exit(1)
            except server_ingester.DataServerStartupError as e:
                msg = _DATA_SERVER_STARTUP_ERROR_MESSAGE_TEMPLATE % e
                sys.stderr.write(msg)
                sys.exit(1)

        if flags.load_fast == "auto" and _should_use_data_server(flags.logdir):
            try:
                return self._start_subprocess_data_ingester()
            except server_ingester.NoDataServerError as e:
                logger.info("No data server: %s", e)
            except server_ingester.DataServerStartupError as e:
                logger.info(
                    "Data server error: %s; falling back to multiplexer", e)

        ingester = local_ingester.LocalDataIngester(flags)
        ingester.start()
        return ingester
示例#2
0
    def _make_data_provider(self):
        """Returns `(data_provider, deprecated_multiplexer)`."""
        flags = self.flags
        if flags.grpc_data_provider:
            ingester = server_ingester.ExistingServerDataIngester(
                flags.grpc_data_provider,
                channel_creds_type=flags.grpc_creds_type,
            )
        elif flags.load_fast:
            ingester = server_ingester.SubprocessServerDataIngester(
                logdir=flags.logdir,
                reload_interval=flags.reload_interval,
                channel_creds_type=flags.grpc_creds_type,
                samples_per_plugin=flags.samples_per_plugin,
            )
        else:
            ingester = local_ingester.LocalDataIngester(flags)

        # Stash ingester so that it can avoid GCing Windows file handles.
        # (See comment in `SubprocessServerDataIngester.start` for details.)
        self._ingester = ingester

        ingester.start()
        deprecated_multiplexer = None
        if isinstance(ingester, local_ingester.LocalDataIngester):
            deprecated_multiplexer = ingester.deprecated_multiplexer
        return (ingester.data_provider, deprecated_multiplexer)
示例#3
0
def _wsgi_app_v2(
    TensorBoardWSGIApp,
    logdir,
    plugins,
    reload_interval=None,
    path_prefix="",
    tensorboard_options=None,
):
    """WSGI app for tensorboard>=2.3.0."""
    with warnings.catch_warnings():
        warnings.simplefilter("ignore", Warning)
        # pylint: disable=no-name-in-module
        from tensorboard.backend.event_processing import data_ingester
        from tensorboard import program

    tb = program.TensorBoard(plugins,
                             program.get_default_assets_zip_provider())
    argv = _base_tb_args(logdir, reload_interval,
                         path_prefix) + _extra_tb_args(tensorboard_options)
    log.debug("TensorBoard args: %r", argv)
    tb.configure(argv)

    ingester = data_ingester.LocalDataIngester(tb.flags)
    ingester.start()
    return TensorBoardWSGIApp(
        tb.flags,
        tb.plugin_loaders,
        ingester.data_provider,
        tb.assets_zip_provider,
        ingester.deprecated_multiplexer,
    )
示例#4
0
 def _make_data_ingester(self):
     flags = self.flags
     if flags.grpc_data_provider:
         return server_ingester.ExistingServerDataIngester(
             flags.grpc_data_provider,
             channel_creds_type=flags.grpc_creds_type,
         )
     if _should_use_data_server(flags.load_fast, flags.logdir):
         try:
             server_binary = server_ingester.get_server_binary()
         except server_ingester.NoDataServerError as e:
             if flags.load_fast == "true":
                 msg = "Option --load_fast=true not available: %s\n" % e
                 sys.stderr.write(msg)
                 sys.exit(1)
             logger.info("No data server: %s", e)
         else:
             if flags.load_fast == "auto":
                 sys.stderr.write(_DATA_SERVER_MESSAGE)
                 sys.stderr.flush()
             return server_ingester.SubprocessServerDataIngester(
                 server_binary=server_binary,
                 logdir=flags.logdir,
                 reload_interval=flags.reload_interval,
                 channel_creds_type=flags.grpc_creds_type,
                 samples_per_plugin=flags.samples_per_plugin,
             )
     return local_ingester.LocalDataIngester(flags)
示例#5
0
 def standard_tensorboard_wsgi(flags, plugin_loaders,
                               assets_zip_provider):
     from tensorboard.backend.event_processing import data_ingester
     ingester = data_ingester.LocalDataIngester(flags)
     ingester.start()
     return application.TensorBoardWSGIApp(
         flags, plugin_loaders, ingester.data_provider,
         assets_zip_provider, ingester.deprecated_multiplexer)
示例#6
0
 def testCheckFilesystemSupport_notCalled(self):
     with mock.patch.object(tf, "__version__", new="stub"):
         with mock.patch.object(
                 data_ingester, "_check_filesystem_support",
                 autospec=True) as mock_check_filesystem_support:
             data_ingester.LocalDataIngester(flags=FakeFlags(
                 logdir="logdir"))
     mock_check_filesystem_support.assert_not_called()
示例#7
0
 def _make_data_provider(self):
     """Returns `(data_provider, deprecated_multiplexer)`."""
     grpc_addr = self.flags.grpc_data_provider
     if grpc_addr:
         return (self._make_grpc_provider(grpc_addr), None)
     else:
         ingester = data_ingester.LocalDataIngester(self.flags)
         ingester.start()
         return (ingester.data_provider, ingester.deprecated_multiplexer)
示例#8
0
 def _make_server(self):
     """Constructs the TensorBoard WSGI app and instantiates the server."""
     ingester = data_ingester.LocalDataIngester(self.flags)
     ingester.start()
     app = application.TensorBoardWSGIApp(
         self.flags,
         self.plugin_loaders,
         ingester.data_provider,
         self.assets_zip_provider,
         ingester.deprecated_multiplexer,
     )
     return self.server_class(app, self.flags)