Example #1
0
class PostprocessingState(object):
  """
  A job that is trying to postprocess
  """

  def __init__(self, job):

    self.job = job


  def is_alive(self):

    return False


  def initiate_postprocessing(self, job):

    raise RuntimeError, "initiate_postprocess called second time"


  def perform_postprocessing(self, job):

    try:
      value = result.Success( value = job.unit.finalize( job = self.job ) )

    except ProcessingException, e:
      raise

    except Exception, e:
      value = result.Error( exception = e )
Example #2
0
  def initiate_postprocessing(self, job):

    self.job.join()

    exit_code = getattr( self.job, "exitcode", 0 ) # Thread has no "exitcode" attribute

    if exit_code == 0:
      job.status = PostprocessingState( job = self.job )

    else:
      err = getattr( self.job, "err", RuntimeError( "exit code = %s" % exit_code ) )
      job.status = ValueState( value = result.Error( exception = err ) )
Example #3
0
    def serve(self):

        while self.active:
            command = pickle.load(self.instream)

            try:
                response = command(server=self)

            except Exception, e:
                pickle.dump(result.Error(exception=e), self.outstream, 0)

            else:
                pickle.dump(result.Success(value=response), self.outstream, 0)

            self.outstream.flush()
Example #4
0
  def poll(self, block):

    if self.exitcode is None:
      from Queue import Empty

      try:
        self.result = self.worker.get( block = block )
        self.exitcode = 0

      except Empty:
        return True

      except Exception, e:
        self.result = result.Error( exception = e )
        self.exitcode = 1
        self.err = e
Example #5
0
  def results(self, raw):

    results = []

    try:
      res = raw()

    except Exception, e:
      results.extend(
        [
          Result(
            identifier = i,
            value = result.Error( exception = e ),
            )
          for i in self.identifiers
          ]
        )
Example #6
0
  def poll(self):

    self.manage_workers()

    if self.identifier_for:
      if self.job_count == 0:
        for identifier in self.identifier_for.keys():
          iden = self.identifier_for[ identifier ]
          res = Result(
            identifier = self.identifier_for[ identifier ],
            value = result.Error( exception = TerminatedException( "Worker died" ) ),
            )
          self.completed_results.append( res )
          del self.identifier_for[ identifier ]

        self.dead = 0

      else:
        self.process_next()
Example #7
0
        [
          Result(
            identifier = i,
            value = result.Error( exception = e ),
            )
          for i in self.identifiers
          ]
        )

    else:
      assert len( res ) == len( self.identifiers )

      for ( identifier, ( failure, data ) ) in zip( self.identifiers, res ):
        if failure:
          results.append(
            Result( identifier = identifier, value = result.Error( exception = data ) )
            )

        else:
          results.append(
            Result( identifier = identifier, value = result.Success( value = data ) )
            )

    return results


class Pooler(object):
  """
  Pools up a number of jobs and runs this way

  pool - number of jobs to pool