From 4b6e6a7df8ea76a247f6336f7ef578755a1b9c03 Mon Sep 17 00:00:00 2001 From: Robin Chen Date: Thu, 2 Dec 2021 15:02:38 +0800 Subject: [PATCH] fix(crb): add unpickling error catch for sync env manager (#134) * update base env manager and test * add test reset once * update subprecess env manager and test * format code * update picking error * add unpickle catch for sync --- ding/envs/env_manager/subprocess_env_manager.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ding/envs/env_manager/subprocess_env_manager.py b/ding/envs/env_manager/subprocess_env_manager.py index a401570..9954a66 100644 --- a/ding/envs/env_manager/subprocess_env_manager.py +++ b/ding/envs/env_manager/subprocess_env_manager.py @@ -789,7 +789,17 @@ class SyncSubprocessEnvManager(AsyncSubprocessEnvManager): # === Because operate in this way is more efficient. === timesteps = {} ready_conn = [self._pipe_parents[env_id] for env_id in env_ids] - timesteps.update({env_id: p.recv() for env_id, p in zip(env_ids, ready_conn)}) + # timesteps.update({env_id: p.recv() for env_id, p in zip(env_ids, ready_conn)}) + for env_id, p in zip(env_ids, ready_conn): + try: + timesteps.update({env_id: p.recv()}) + except pickle.UnpicklingError as e: + timestep = BaseEnvTimestep(None, None, None, {'abnormal': True}) + timesteps.update({env_id: timestep}) + self._pipe_parents[env_id].close() + if self._subprocesses[env_id].is_alive(): + self._subprocesses[env_id].terminate() + self._create_env_subprocess(env_id) self._check_data(timesteps) # ====================================================== -- GitLab