backend.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. """Backend - Send to internal process.
  2. Manage backend.
  3. """
  4. from __future__ import annotations
  5. import logging
  6. from typing import TYPE_CHECKING
  7. from wandb.sdk.interface.interface import InterfaceBase
  8. if TYPE_CHECKING:
  9. from wandb.sdk.lib.service import service_connection
  10. from wandb.sdk.wandb_settings import Settings
  11. logger = logging.getLogger("wandb")
  12. class Backend:
  13. interface: InterfaceBase | None
  14. _settings: Settings
  15. _done: bool
  16. _service: service_connection.ServiceConnection | None
  17. def __init__(
  18. self,
  19. settings: Settings,
  20. service: service_connection.ServiceConnection | None = None,
  21. ) -> None:
  22. self._done = False
  23. self.interface = None
  24. self._settings = settings
  25. self._service = service
  26. def ensure_launched(self) -> None:
  27. """Launch backend worker if not running."""
  28. assert self._settings.run_id
  29. assert self._service
  30. self.interface = self._service.make_interface(
  31. stream_id=self._settings.run_id,
  32. )
  33. def server_status(self) -> None:
  34. """Report server status."""
  35. def cleanup(self) -> None:
  36. # TODO: make _done atomic
  37. if self._done:
  38. return
  39. self._done = True
  40. if self.interface:
  41. self.interface.join()