From 263a3419ef2f0be3cd91941a8e897abcc09da9ae Mon Sep 17 00:00:00 2001 From: Xingdong Zuo Date: Sun, 12 Sep 2021 02:03:54 +0900 Subject: [PATCH] [Python 3]: replace `time()` with `perf_counter()` for better measurements of short duration. (#2385) * Update record_episode_statistics.py * Update stats_recorder.py * Update async_vector_env.py --- gym/vector/async_vector_env.py | 4 ++-- gym/wrappers/monitoring/stats_recorder.py | 4 ++-- gym/wrappers/record_episode_statistics.py | 6 ++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/gym/vector/async_vector_env.py b/gym/vector/async_vector_env.py index 1def2fdfe51..331dfcd5568 100644 --- a/gym/vector/async_vector_env.py +++ b/gym/vector/async_vector_env.py @@ -349,10 +349,10 @@ def _poll(self, timeout=None): self._assert_is_running() if timeout is None: return True - end_time = time.time() + timeout + end_time = time.perf_counter() + timeout delta = None for pipe in self.parent_pipes: - delta = max(end_time - time.time(), 0) + delta = max(end_time - time.perf_counter(), 0) if pipe is None: return False if pipe.closed or (not pipe.poll(delta)): diff --git a/gym/wrappers/monitoring/stats_recorder.py b/gym/wrappers/monitoring/stats_recorder.py index 758f193d414..32a693e50eb 100644 --- a/gym/wrappers/monitoring/stats_recorder.py +++ b/gym/wrappers/monitoring/stats_recorder.py @@ -85,7 +85,7 @@ def before_reset(self): self.done = False if self.initial_reset_timestamp is None: - self.initial_reset_timestamp = time.time() + self.initial_reset_timestamp = time.perf_counter() def after_reset(self, observation): self.steps = 0 @@ -99,7 +99,7 @@ def save_complete(self): if self.steps is not None: self.episode_lengths.append(self.steps) self.episode_rewards.append(float(self.rewards)) - self.timestamps.append(time.time()) + self.timestamps.append(time.perf_counter()) def close(self): self.flush() diff --git a/gym/wrappers/record_episode_statistics.py b/gym/wrappers/record_episode_statistics.py index 798f8d36adb..5d5d348d3a4 100644 --- a/gym/wrappers/record_episode_statistics.py +++ b/gym/wrappers/record_episode_statistics.py @@ -8,9 +8,7 @@ class RecordEpisodeStatistics(gym.Wrapper): def __init__(self, env, deque_size=100): super(RecordEpisodeStatistics, self).__init__(env) self.num_envs = getattr(env, "num_envs", 1) - self.t0 = ( - time.time() - ) # TODO: use perf_counter when gym removes Python 2 support + self.t0 = time.perf_counter() self.episode_count = 0 self.episode_returns = None self.episode_lengths = None @@ -41,7 +39,7 @@ def step(self, action): episode_info = { "r": episode_return, "l": episode_length, - "t": round(time.time() - self.t0, 6), + "t": round(time.perf_counter() - self.t0, 6), } infos[i]["episode"] = episode_info self.return_queue.append(episode_return)