Advertisement
DeaD_EyE

MemoryLimit Context Manager / example

Apr 9th, 2018
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.79 KB | None | 0 0
  1. import logging
  2. import resource
  3. import sys
  4.  
  5.  
  6. class MemoryLimit:
  7.  
  8.     def __init__(self, soft, hard, log):
  9.         self.soft = soft
  10.         self.hard = hard
  11.  
  12.     def __enter__(self):
  13.         self.set_limit()
  14.         return self
  15.  
  16.     def __exit__(self, exc_type, exc_val, exc_tb):
  17.         if isinstance(exc_val, MemoryError):
  18.             log.critical('MemoryError')
  19.             return True
  20.  
  21.     def set_limit(self):
  22.         resource.setrlimit(resource.RLIMIT_AS, (self.soft, self.hard))
  23.  
  24.  
  25. def main():
  26.     list(range(int(1e9)))
  27.     # 1/0
  28.     return 0
  29.  
  30.  
  31. if __name__ == '__main__':
  32.     logging.basicConfig()
  33.     log = logging.getLogger()
  34.     MiB = 1 * 1024 ** 2
  35.     with MemoryLimit(5 * MiB, 6 * MiB, log):
  36.         sys.exit(main())
  37.     print('Cleanup Code')
  38.     sys.exit(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement