queue enqueue_many是否阻止unitll所有项目都在队列中?

时间:2017-01-18 16:58:55

标签: python multithreading tensorflow queue

我正在解决一个问题,我需要保证队列中项目的顺序,但是,我还想使用多个线程来执行此操作。因此,我想知道对enqueue_many的调用是否会确保这些项目按顺序排列?

对此的一个解决方案是仅使用一个线程来排队项目,但这不是最佳的。

文档仅在队列已满的情况下提及阻止。

  

tf.QueueBase.enqueue_many(vals,name = None)

     

将零个或多个元素排入此队列。

     

此操作沿着第0维切割每个组件张量   制作多个队列元素。 vals中的所有张量都必须具有   第0维的大小相同。

     

如果此操作执行时队列已满,则会阻塞直到   所有元素都已入队。

     

在运行时,如果队列关闭,此操作可能会引发错误   在执行之前或期间。如果队列在此之前关闭   操作运行,tf.errors.AbortedError将被引发。如果这   操作被阻止,并且(i)队列因关闭而关闭   使用cancel_pending_enqueues = True或(ii)会话的操作   关闭,tf.errors.CancelledError将被引发。参数数量:

vals: A tensor, a list or tuple of tensors, or a dictionary from which the queue elements are taken.
name: A name for the operation (optional).
     

返回:

     

将一批张量的元组排入队列的操作。

https://www.tensorflow.org/versions/r0.10/api_docs/python/io_ops/queues#QueueBase

1 个答案:

答案 0 :(得分:0)

根据经验,他们似乎是原子的。 IE,这里是一个example同时将zerosones大块排队,然后检查是否有任何混合。