code: def start(self, streamer=False):
          
          if streamer and not general.socket_ready(self.task_in_url):  # started
              self.streamer = multiprocessing.Process(
                  target=_streamer,
                  args=(self.master_host, self.task_in_port, self.task_out_port))
              self.streamer.start()
          starting = []
          for host, cores in self.host_cores:
              if self.status(host)[0][1] == 'running':
                  print('%s:%s already running' % (host, self.ctrl_port))
                  continue
              ctrl_url = 'tcp://%s:%s' % (host, self.ctrl_port)
              if host == '127.0.0.1':  # localhost
                  args = [sys.executable]
              else:
                  args = ['ssh', host, self.remote_python]
              args += ['-m', 'openquake.baselib.workerpool',
                       ctrl_url, self.task_out_url, cores]
              starting.append(' '.join(args))
              po = subprocess.Popen(args)
              self.pids.append(po.pid)
          return 'starting %s' % starting
docs: Start multiple workerpools, possibly on remote servers via ssh,
          and possibly a streamer, depending on the `streamercls`.
  
          :param streamer:
              if True, starts a streamer with multiprocessing.Process