chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import atexit
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
import gymnasium as gym
|
||||
from gymnasium.spaces import Discrete
|
||||
|
||||
|
||||
class EnvWithSubprocess(gym.Env):
|
||||
"""An env that spawns a subprocess."""
|
||||
|
||||
# Dummy command to run as a subprocess with a unique name
|
||||
UNIQUE_CMD = "sleep 20"
|
||||
|
||||
def __init__(self, config):
|
||||
self.UNIQUE_FILE_0 = config["tmp_file1"]
|
||||
self.UNIQUE_FILE_1 = config["tmp_file2"]
|
||||
self.UNIQUE_FILE_2 = config["tmp_file3"]
|
||||
self.UNIQUE_FILE_3 = config["tmp_file4"]
|
||||
|
||||
self.action_space = Discrete(2)
|
||||
self.observation_space = Discrete(2)
|
||||
# Subprocess that should be cleaned up.
|
||||
self.subproc = subprocess.Popen(self.UNIQUE_CMD.split(" "), shell=False)
|
||||
self.config = config
|
||||
# Exit handler should be called.
|
||||
atexit.register(lambda: self.subproc.kill())
|
||||
if config.worker_index == 0:
|
||||
atexit.register(lambda: os.unlink(self.UNIQUE_FILE_0))
|
||||
else:
|
||||
atexit.register(lambda: os.unlink(self.UNIQUE_FILE_1))
|
||||
|
||||
def close(self):
|
||||
if self.config.worker_index == 0:
|
||||
os.unlink(self.UNIQUE_FILE_2)
|
||||
else:
|
||||
os.unlink(self.UNIQUE_FILE_3)
|
||||
|
||||
def reset(self, *, seed=None, options=None):
|
||||
return 0, {}
|
||||
|
||||
def step(self, action):
|
||||
return 0, 0, True, False, {}
|
||||
Reference in New Issue
Block a user