ZichaoHuang/TransE

一点小问题

Closed this issue · 4 comments

你好,再次感谢你的代码。有一个小地方没有看明白,在model.py的 launch_training函数中,存在
for _ in range(self.n_generator):
raw_batch_queue.put(None)
请问为什么要有这一句,是什么意思呢?
what is the 'Put (None)'means?
thank you

假设有n个generator,我们需要在数据队列最后放入n个None,用来告诉每个generator数据队列中已经没有可以处理的数据了,可以return了。
这里是具体的处理逻辑:https://github.com/ZichaoHuang/TransE/blob/master/src/dataset.py#L80

我把raw_batch_queue.put(None)注释掉也能正常运行,不知道和不注释有什么区别

@ocsponge 按我的经验,这是“生产者-消费者”模式的一般写法。
队列最后的“None”用于告知消费者进程“当前的生产者队列中已经没有待处理的对象,消费者进程可以退出”。
如果不在生产者队列的最后加入None,消费者进程有可能会一直请求数据,造成资源浪费。

懂了,非常感谢~