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

eri*_*ora 5 python queue multithreading tensorflow

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

queue_instance.enqueue_many(T)哪里T是长度的张量列表N.

让我们来标记每个张量从第一线为T1_1T1_N,并T2_1T2_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, ...]?或者,我想,第三种选择是没有任何押韵或理由:张量以任意顺序排列.

mrr*_*rry 4

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


* 但是,如果队列的剩余容量小于正在排队的批处理的大小,则可以在入队完成之前将元素从批处理中出列,即您可以将大于排队容量的批处理入队。队列,入队操作将阻塞,直到有足够的元素出队。