docstr: Put an item into the queue.
  
  If optional args `block` is True and `timeout` is None (the
  default), block if necessary until a free slot is
  available. If `timeout` is a positive number, it blocks at
  most `timeout` seconds and raises the ``Full`` exception if no
  free slot was available within that time.  Otherwise (`block`
  is false), put an item on the queue if a free slot is
  immediately available, else raise the ``Full`` exception
  (`timeout` is ignored in that case).
docstr_tok: ["Put","an","item","into","the","queue",".","If","optional","args","`","block","`","is","True","and","`","timeout","`","is","None","(","the","default",")",",","block","if","necessary","until","a","free","slot","is","available",".","If","`","timeout","`","is","a","positive","number",",","it","blocks","at","most","`","timeout","`","seconds","and","raises","the","``","Full","``","exception","if","no","free","slot","was","available","within","that","time",".","Otherwise","(","`","block","`","is","false",")",",","put","an","item","on","the","queue","if","a","free","slot","is","immediately","available",",","else","raise","the","``","Full","``","exception","(","`","timeout","`","is","ignored","in","that","case",")","."]
code: def put(
      self,
      item: _T,
      block: bool = True,
      timeout: Optional[float] = None,
  ) -> None:
      """Put an item into the queue.
  
      If optional args `block` is True and `timeout` is None (the
      default), block if necessary until a free slot is
      available. If `timeout` is a positive number, it blocks at
      most `timeout` seconds and raises the ``Full`` exception if no
      free slot was available within that time.  Otherwise (`block`
      is false), put an item on the queue if a free slot is
      immediately available, else raise the ``Full`` exception
      (`timeout` is ignored in that case).
      """
  
      with self.not_full:
          if not block:
              if self._full():
                  raise Full
          elif timeout is None:
              while self._full():
                  self.not_full.wait()
          else:
              if timeout < 0:
                  raise ValueError(
                      "'timeout' must be a positive number"
                  )
              endtime = _time() + timeout
              while self._full():
                  remaining = endtime - _time()
                  if remaining <= 0.0:
                      raise Full
                  self.not_full.wait(remaining)
          self._put(item)
          self.not_empty.notify()
  
imports: from __future__ import annotations
  import asyncio
  from collections import deque
  import threading
  from time import time
  from typing import Any
  from typing import Deque
  from typing import Generic
  from typing import Optional
  from typing import TypeVar
  from .concurrency import await_
  from .langhelpers import memoized_property
label_desc: Use image node_id 5 for calling the Queue obj's underlying member method code with example usage: obj.put(item, block, timeout) without return types