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))
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