Tensorflow的QueueBase.enqueue_many是否保留了跨线程的顺序?

时间:2016-03-30 21:18:59

标签: python multithreading queue tensorflow

假设有两个线程同时尝试将每个N个张量排入FIFOQueue的一个实例中。即,他们正在打电话

queue_instance.enqueue_many(T)其中T是长度为N的张量列表。

让我们将第一个线程中的每个张量标记为T1_1T1_N,将T2_1标记为T2_N以表示第二个线程。完成所有操作后(对enqueue_many的两次调用都已完成),是否会保留订单?即,队列是否包含[T1_1, ..., T1_N, T2_1, ..., T2_N][T2_1, ..., T2_N, T1_1, ..., T1_N]?或者张量可以以交错方式排列,即[T2_1, T2_2, T1_1, T2_3, T1_2, ...]?或者,我想,第三种选择是没有任何押韵或理由:张量以任意顺序排列。

1 个答案:

答案 0 :(得分:4)

保留每个线程排队的批次中的顺序。另一种方法是FIFOQueue.enqueue_many()相对于同一队列上的其他排队操作以原子方式*执行。

*但是,如果队列的剩余容量小于要排队的批次的大小,则可以在排队完成之前从批次中出列元素 - 即。您可以将更大的批次入队列入队列的容量,并且enqueue op将阻塞,直到有足够的元素出列为止。