Пример #1
0
  def finish_job(self, jobid):

    process = self.process_data_for[ jobid ]
    process.join()
    exit_code = getattr( process, "exitcode", 0 ) # Thread has no "exitcode" attribute

    if exit_code != 0:
      res = result.error(
        exception = result.get_exception( process = process, exit_code = exit_code ),
        traceback = result.get_crash_info( process = process ),
        )
      self.completed_results.append( ( jobid, res ) )

    else:
      self.waiting_results.add( jobid )

    del self.process_data_for[ jobid ]
Пример #2
0
    def poll(self):

        for (pid, process) in list(self.process_numbered_as.items()):
            if not process.is_alive():
                process.join()

                exit_code = getattr(process, "exitcode",
                                    0)  # Thread has no "exitcode" attribute

                if exit_code != 0:
                    data = (
                        pid,
                        result.get_exception(process=process,
                                             exit_code=exit_code),
                        result.get_crash_info(process=process),
                    )
                    self.unreporteds.append((worker_crash_event, data))

                self.terminatings.add(pid)
                del self.process_numbered_as[pid]

        while self.unreporteds:
            try:
                self.inqueue.put(self.unreporteds[0], timeout=self.stalltime)

            except Full:
                break

            self.unreporteds.popleft()

        while True:
            try:
                (event, data) = self.inqueue.get(timeout=self.waittime)

            except Empty:
                break

            event(register=self.register, data=data)

        while self.register.terminateds:
            pid = self.register.terminateds[0]

            try:
                self.terminatings.remove(pid)

            except KeyError:
                break

            self.register.terminateds.popleft()
            self.recycleds.append(pid)

        while self.register.requested_shutdowns:
            pid = self.register.requested_shutdowns[0]

            try:
                self.terminatings.remove(pid)

            except KeyError:
                break

            self.register.requested_shutdowns.popleft()
            self.recycleds.append(pid)
            assert 0 < self.outstanding_shutdown_requests
            self.outstanding_shutdown_requests -= 1

        while self.register.results:
            (jobid, res) = self.register.results.popleft()
            self.completed_results.append((jobid, res))
            self.running_jobs.remove(jobid)
Пример #3
0
  def poll(self):

    for ( pid, process ) in self.process_numbered_as.items():
      if not process.is_alive():
        process.join()

        exit_code = getattr( process, "exitcode", 0 ) # Thread has no "exitcode" attribute

        if exit_code != 0:
          data = (
            pid,
            result.get_exception( process = process, exit_code = exit_code ),
            result.get_crash_info( process = process ),
            )
          self.unreporteds.append( ( worker_crash_event, data ) )

        self.terminatings.add( pid )
        del self.process_numbered_as[ pid ]

    while self.unreporteds:
      try:
        self.inqueue.put( self.unreporteds[0], timeout = self.stalltime )

      except Full:
        break

      self.unreporteds.popleft()

    while True:
      try:
        ( event, data ) = self.inqueue.get( timeout = self.waittime )

      except Empty:
        break

      event( register = self.register, data = data )

    while self.register.terminateds:
      pid = self.register.terminateds[0]

      try:
        self.terminatings.remove( pid )

      except KeyError:
        break

      self.register.terminateds.popleft()
      self.recycleds.append( pid )

    while self.register.requested_shutdowns:
      pid = self.register.requested_shutdowns[0]

      try:
        self.terminatings.remove( pid )

      except KeyError:
        break

      self.register.requested_shutdowns.popleft()
      self.recycleds.append( pid )
      assert 0 < self.outstanding_shutdown_requests
      self.outstanding_shutdown_requests -= 1

    while self.register.results:
      ( jobid, res ) = self.register.results.popleft()
      self.completed_results.append( ( jobid, res ) )
      self.running_jobs.remove( jobid )