def __write_signal(self, signum=None): """Writes the given signal integer signum to the signal file. """ signum = int(signum) if not is_valid_type(signum, int): raise ValueError("Signal must be an integer number.") signals = self.read_signals() if signum not in signals: signals.append(signum) signals = " ".join(str(i) for i in signals) with open(os.path.join(self.checkpoint_dir, "signals"), "w") as signal_file: signal_file.write(signals)
def register_signal(self, signum=None): """ Register a signal that will trigger signal_handler(). """ if not is_valid_type(signum, int): raise ValueError("Signal must be an integer number.") if signum in self.checkpoint_signals: raise KeyError( "The signal {} is already registered for checkpointing.". format(signum)) signal.signal(signum, self.signal_handler) self.checkpoint_signals.append(signum) self.write_signal(signum)
def test_is_valid_type(self): # basic types self.assertFalse(utils.is_valid_type(None, int)) self.assertFalse(utils.is_valid_type('12', int)) self.assertFalse(utils.is_valid_type(0.99, int)) self.assertFalse(utils.is_valid_type(12, float)) self.assertFalse(utils.is_valid_type(1234, str)) self.assertTrue(utils.is_valid_type(1.0, float)) self.assertTrue(utils.is_valid_type(12345, int)) self.assertTrue(utils.is_valid_type('123', str)) self.assertTrue(utils.is_valid_type(np.array([123.])[0], float)) self.assertTrue(utils.is_valid_type(np.array([1234])[0], int)) self.assertTrue(utils.is_valid_type(np.array([True])[0], bool)) # numpy types self.assertTrue(utils.is_valid_type( np.array([12], dtype=int)[0], int)) self.assertTrue(utils.is_valid_type( np.array([12], dtype=int)[0], int)) self.assertTrue(utils.is_valid_type( np.array([1.], dtype=float)[0], float)) self.assertTrue(utils.is_valid_type( np.array([1.], dtype=np.float64)[0], float))