2424
2525from openrl .envs .toy_envs import make_toy_envs
2626from openrl .envs .vec_env .async_venv import AsyncVectorEnv
27-
27+ from openrl .envs .vec_env .async_venv import _worker
28+ import multiprocessing as mp
2829
2930class CustomEnvCompatibility (EnvCompatibility ):
3031 def reset (self , ** kwargs ):
@@ -48,18 +49,68 @@ def assert_env_name(env, env_name):
4849 assert env .metadata ["name" ].__name__ == env_name
4950
5051
52+ # @pytest.mark.unittest
53+ # def test_async_env():
54+ # env_name = "IdentityEnv"
55+ # env = AsyncVectorEnv(init_envs(), shared_memory=True)
56+ # assert (
57+ # env._env_name == env_name
58+ # ), "AsyncVectorEnv should have the same metadata as the wrapped env"
59+ # env.exec_func(assert_env_name, indices=None, env_name=env_name)
60+ # env.call("render")
61+ # env_name_new = "IdentityEnvNew"
62+ # env.set_attr("metadata", {"name": env_name_new})
63+ # env.exec_func(assert_env_name, indices=None, env_name=env_name_new)
64+
65+ def main_control (parent_pipe ,child_pipe ):
66+ child_pipe .close ()
67+
68+ parent_pipe .send (("reset" , {"seed" :0 }))
69+ result , success = parent_pipe .recv ()
70+ assert success , result
71+
72+ parent_pipe .send (("step" , [0 ]))
73+ result , success = parent_pipe .recv ()
74+ assert success , result
75+
76+ parent_pipe .send (("_call" , ("render" ,[],{})))
77+ result , success = parent_pipe .recv ()
78+ assert success , result
79+
80+ parent_pipe .send (("_setattr" , ("metadata" , {"name" : "IdentityEnvNew" })))
81+ result , success = parent_pipe .recv ()
82+ assert success , result
83+
84+ parent_pipe .send (("_func_exec" ,(assert_env_name ,None ,[],{"env_name" :"IdentityEnvNew" })))
85+ result , success = parent_pipe .recv ()
86+ assert success , result
87+
88+ parent_pipe .send (("close" ,None ))
89+ result , success = parent_pipe .recv ()
90+ assert success , result
91+
92+
5193@pytest .mark .unittest
52- def test_async_env ():
53- env_name = "IdentityEnv"
54- env = AsyncVectorEnv (init_envs (), shared_memory = True )
55- assert (
56- env ._env_name == env_name
57- ), "AsyncVectorEnv should have the same metadata as the wrapped env"
58- env .exec_func (assert_env_name , indices = None , env_name = env_name )
59- env .call ("render" )
60- env_name_new = "IdentityEnvNew"
61- env .set_attr ("metadata" , {"name" : env_name_new })
62- env .exec_func (assert_env_name , indices = None , env_name = env_name_new )
94+ def test_worker ():
95+ for auto_reset in [True ,False ]:
96+ ctx = mp .get_context (None )
97+ parent_pipe , child_pipe = ctx .Pipe ()
98+
99+ error_queue = ctx .Queue ()
100+
101+ process = ctx .Process (
102+ target = main_control ,
103+ name = "test" ,
104+ args = (
105+ parent_pipe ,
106+ child_pipe
107+ ),
108+ )
109+ process .daemon = True
110+ process .start ()
111+ _worker (0 , init_envs ()[0 ], child_pipe , None , False , error_queue , auto_reset )
112+
113+
63114
64115
65116if __name__ == "__main__" :
0 commit comments