code: def start(self):
          
          setproctitle('oq-zworkerpool %s' % self.ctrl_url[6:])  # strip tcp://
          # start workers
          self.workers = []
          for _ in range(self.num_workers):
              sock = z.Socket(self.task_out_port, z.zmq.PULL, 'connect')
              proc = multiprocessing.Process(target=self.worker, args=(sock,))
              proc.start()
              sock.pid = proc.pid
              self.workers.append(sock)
  
          # start control loop accepting the commands stop and kill
          with z.Socket(self.ctrl_url, z.zmq.REP, 'bind') as ctrlsock:
              for cmd in ctrlsock:
                  if cmd in ('stop', 'kill'):
                      msg = getattr(self, cmd)()
                      ctrlsock.send(msg)
                      break
                  elif cmd == 'getpid':
                      ctrlsock.send(self.pid)
                  elif cmd == 'get_num_workers':
                      ctrlsock.send(self.num_workers)
docs: Start worker processes and a control loop