ZichaoHuang / TransE

A TensorFlow implementation of TransE model
198 stars 62 forks source link

一点小问题 #5

Closed ShangYuming closed 6 years ago

ShangYuming commented 6 years ago

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

ZichaoHuang commented 6 years ago

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

ocsponge commented 6 years ago

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

ZichaoHuang commented 6 years ago

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

ocsponge commented 6 years ago

懂了,非常感谢~