memory_leaking_env.py 906 B

1234567891011121314151617181920212223242526272829303132333435
  1. import logging
  2. import uuid
  3. from ray.rllib.examples.env.random_env import RandomEnv
  4. from ray.rllib.utils.annotations import override
  5. logger = logging.getLogger(__name__)
  6. class MemoryLeakingEnv(RandomEnv):
  7. """An env that leaks very little memory.
  8. Useful for proving that our memory-leak tests can catch the
  9. slightest leaks.
  10. """
  11. def __init__(self, config=None):
  12. super().__init__(config)
  13. self._leak = {}
  14. self._steps_after_reset = 0
  15. @override(RandomEnv)
  16. def reset(self, *, seed=None, options=None):
  17. self._steps_after_reset = 0
  18. return super().reset(seed=seed, options=options)
  19. @override(RandomEnv)
  20. def step(self, action):
  21. self._steps_after_reset += 1
  22. # Only leak once an episode.
  23. if self._steps_after_reset == 2:
  24. self._leak[uuid.uuid4().hex.upper()] = 1
  25. return super().step(action)