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