如何并行运行多个开放AI健身房环境

2024-06-02 20:10:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试运行10个并行的开放人工智能健身房环境,每个环境都有自己的线程。问题是我想保存env中每个步骤的转换,并在所有线程完成后访问它。但是,我无法确定如何为每个列表创建单独的实例,然后从主线程访问它们

任何帮助都将不胜感激

def run_episode(scale, modification_network, expert_network):
    with lock:
        rollouts_obs = []
        rollouts_action = []
        rollouts_reward = []
        rollouts_done = []
        env = BipedalWalker()
        env.update_scale(scale)
        # reset the environment to collect the first observation
        done = False
        obs = env.reset()
        while not done:
            action = env.action_space.sample()
            obs, reward, done, info = env.step(action)

            rollouts_obs.append(obs)
            rollouts_action.append(action)
            rollouts_reward.append(reward)
            rollouts_done.append(done)

jobs = []
for i in range(10):
    thread = threading.Thread(target=run_episode, args=(scale[i], agent, expert_net))
    jobs.append(thread)
    
for j in jobs:
    j.start()

for j in jobs:
    j.join()

Tags: runinenvfor环境jobsaction线程
1条回答
网友
1楼 · 发布于 2024-06-02 20:10:07

您可以尝试将相同的列表(或其他线程安全数据结构)作为参数传递给所有run_情节线程,并在函数末尾将结果附加到该列表,而不返回任何内容。所有线程加入后,列表对象应按完成顺序包含所有结果。请注意,列表是线程安全的,但它们的内容不是(Are lists thread-safe?),因此仅附加到列表中,并且在run_期间从不访问附加的数据

相关问题 更多 >