如何在python中的多个进程之间共享缓冲区对象?

时间:2019-01-26 17:02:01

标签: python multiprocessing

我目前正在实施强化学习算法,并想尝试将数据获取和培训分开。现在,我设置并处理运行代理的过程,收集数据并将其存储到重播缓冲区中。现在,另一个过程需要访问此重播缓冲区以训练样本。那就是我被卡住的地方,因为我不知道如何从第二个进程访问该缓冲对象。

由于我以前从未真正使用过多处理,因此我不确定哪种方法适合我的问题以及如何实现它。我必须使用管理器还是必须使用多处理数组编写另一个ReplayBuffer?

下面是我当前使用的ReplayBuffer类:

class ReplayBuffer:
    def __init__(self, capacity):
        self.capacity = capacity
        self.buffer = []
        self.position = 0

    def store(self, state, action, reward, next_state, done):
        if len(self.buffer) < self.capacity:
            self.buffer.append(None)
        self.buffer[self.position] = (state, action, reward, next_state, done)
        self.position = (self.position + 1) % self.capacity

    def sample(self, batch_size):
        batch = random.sample(self.buffer, batch_size)
        state, action, reward, next_state, done = map(np.stack, zip(*batch))
        return state, action, reward, next_state, done

    def __len__(self):
        return len(self.buffer)

希望任何人都可以给我一些建议。

0 个答案:

没有答案