class_docstr: Base class for services that support multiple clients.
class_docstr_tok: ["Base","class","for","services","that","support","multiple","clients","."]
docstr: Searches for a running instance of this service, or starts one
  if no instance is found.
code: def start(self):
      """Searches for a running instance of this service, or starts one
      if no instance is found.
      """
      for process in fosu.find_processes_by_args(self._service_args):
          desc = "Process %i (%s)" % (
              process.pid,
              " ".join(
                  [os.path.join("service", "main.py")]
                  + self._service_args
              ),
          )
          logger.debug("Connecting to %s", desc)
          try:
              reply = fosu.send_ipc_message(
                  process, ("register", os.getpid())
              )
              if reply == True:
                  self.attached = True
                  self.child = process
                  return
              else:
                  logger.warning(
                      "Failed to connect to %s: %r", desc, reply
                  )
  
          except IOError:
              logger.warning("%s did not respond", desc)
  
      super().start()
  
imports: import logging
  import os
  import subprocess
  import sys
  import psutil
  import requests
  from retrying import retry
  import eta.core.utils
  import fiftyone.constants
  import fiftyone.core.config
  import fiftyone.core.context
  import fiftyone.service.util
label_desc: Use image node_id 2 for calling the MultiClientService obj's underlying member method code with example usage: obj.start() without return types