Exemplo n.º 1
0
class FileJobPoller(object):
    def __init__(self,
                 queue_dir,
                 processing_dir=None,
                 sleep_time=1,
                 max_num_jobs=5):
        self.queue_dir = utils.ensure_dir(queue_dir)
        self.sleep_time = sleep_time
        self.max_num_jobs = max_num_jobs
        self.num_jobs = 0
        self.log = Log('FileJobPoller')
        self.files = []

    def _reap_children(self):
        while self.num_jobs > 0:
            try:
                if self.num_jobs == self.max_num_jobs:
                    flags = 0
                else:
                    flags = os.WNOHANG
                pid, rc = os.waitpid(-1, flags)
            except OSError, exc:
                self.log.ERROR('waitpid(-1) failed: %s' % exc)
                break
            if (pid, rc) == (0, 0):
                break
            self.num_jobs -= 1
            self.log.info('child %s exited: %s. have %d jobs' %
                          (pid, rc, self.num_jobs))
Exemplo n.º 2
0
            fd = env['wsgi.input']
            if hasattr(fd, 'fileno') and fd.fileno() >= 0:
                msvcrt.setmode(fd.fileno(), os.O_BINARY)

        start_time = time.time()
        try:
            request = Request(env)
        except Exception, exc:
            log.ERROR('invalid request: %s' % exc)
            traceback.print_exc()
            response = self.http500()
        else:
            try:
                response = self.dispatch(request)
                if not isinstance(response, Response):
                    log.ERROR('invalid result from dispatch(): %r' % response)
                    response = self.http500()
            except Exception, exc:
                response = self.http500(exc)

        response.finish()
        start_response('%d %s' % (response.status_code, response.status_text),
                       response.headers.items())
        if isinstance(response.content, str):
            yield response.content
        else:
            while True:
                d = response.content.read(0x20000)
                if not d:
                    break
                yield d