首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何并行运行多个开放的AI健身房环境

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

Stack Overflow用户
提问于 2020-08-28 18:10:05
回答 1查看 414关注 0票数 0

我正在尝试运行10个并行的开放AI健身房环境,每个环境都有自己的线程。问题是,我希望将每个步骤的转换保存在env中,并在所有线程完成后访问它。但是,我不知道如何创建每个列表的单独实例,然后从主线程访问它们。

任何帮助都将不胜感激。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2021-10-17 12:22:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63631733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档