class_docstr: A thread-safe task queue with duplicate detection.
  
  The life-cycle of a task starts with producers calling `enqueue`. Consumers
  call `dequeue` to obtain the tasks in FIFO order. When processing is complete,
  consumers must release the tasks by calling `task_done`.
class_docstr_tok: ["A","thread-safe","task","queue","with","duplicate","detection",".","The","life-cycle","of","a","task","starts","with","producers","calling","`","enqueue","`",".","Consumers","call","`","dequeue","`","to","obtain","the","tasks","in","FIFO","order",".","When","processing","is","complete",",","consumers","must","release","the","tasks","by","calling","`","task_done","`","."]
docstr: Returns `True` if the task queue is empty.
  
  Queue is considered empty only if any enqueued tasks have been dequeued and
  `task_done` invoked on them.
docstr_tok: ["Returns","`","True","`","if","the","task","queue","is","empty",".","Queue","is","considered","empty","only","if","any","enqueued","tasks","have","been","dequeued","and","`","task_done","`","invoked","on","them","."]
code: def is_empty(self) -> bool:
      """Returns `True` if the task queue is empty.
  
      Queue is considered empty only if any enqueued tasks have been dequeued and
      `task_done` invoked on them.
      """
      with self._lock:
          return not self._task_ids
  
file_path: tfx/tfx/orchestration/experimental/core/task_queue.py
imports: import queue
  import threading
  from typing import Optional
  from tfx.orchestration.experimental.core import task
label_desc: Use image node_id 6 for calling the TaskQueue obj's underlying member method code with example usage: obj.is_empty() and returns: unknown