code: def put(
          self, item: _T, timeout: Union[float, datetime.timedelta] = None
      ) -> "Future[None]":
          
          future = Future()  # type: Future[None]
          try:
              self.put_nowait(item)
          except QueueFull:
              self._putters.append((item, future))
              _set_timeout(future, timeout)
          else:
              future.set_result(None)
          return future
docs: Put an item into the queue, perhaps waiting until there is room.
  
          Returns a Future, which raises `tornado.util.TimeoutError` after a
          timeout.
  
          ``timeout`` may be a number denoting a time (on the same
          scale as `tornado.ioloop.IOLoop.time`, normally `time.time`), or a
          `datetime.timedelta` object for a deadline relative to the
          current time.