def cancel_call(self, call): """Cancels the specified deferred call.""" for call_id in range(len(self.__deferred_calls)): if self.__deferred_calls[call_id] is call: del self.__deferred_calls[call_id] return
def close_all_fds(except_fds=[STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO]): """Closes all opened file descriptors.""" if platform.system() == "Darwin": fd_path = "/dev/fd" else: fd_path = "/proc/self/fd" try: opened_fds = [ int(fd) for fd in os.listdir(fd_path) ] except EnvironmentError: max_fd_num = resource.getrlimit(resource.RLIMIT_NOFILE)[1] if max_fd_num == resource.RLIM_INFINITY: max_fd_num = 1024 opened_fds = range(0, max_fd_num) for fd in opened_fds: if fd not in except_fds: try: eintr_retry(os.close)(fd) except EnvironmentError as e: if e.errno != errno.EBADF: raise e
def close_all_fds(except_fds = [ STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO ]): """Closes all opened file descriptors.""" if platform.system() == "Darwin": fd_path = "/dev/fd" else: fd_path = "/proc/self/fd" try: opened_fds = [ int(fd) for fd in os.listdir(fd_path) ] except EnvironmentError: max_fd_num = resource.getrlimit(resource.RLIMIT_NOFILE)[1] if max_fd_num == resource.RLIM_INFINITY: max_fd_num = 1024 opened_fds = range(0, max_fd_num) for fd in opened_fds: if fd not in except_fds: try: eintr_retry(os.close)(fd) except EnvironmentError as e: if e.errno != errno.EBADF: raise e
def __process_deferred_calls(self): """Processes pending deferred calls.""" if not self.__deferred_calls: return cur_time = time.time() precision = 0.001 for call_id in range(len(self.__deferred_calls)): if self.__deferred_calls[call_id].time - precision > cur_time: pending_calls = self.__deferred_calls[:call_id] del self.__deferred_calls[:call_id] break else: pending_calls = self.__deferred_calls self.__deferred_calls = [] for call in pending_calls: try: call.func() except Exception: LOG.exception("A deferred call crashed.")