class_docstr: Coordinate producer and consumer coroutines.
  
  If maxsize is 0 (the default) the queue size is unbounded.
  
  .. testcode::
  
      import asyncio
      from tornado.ioloop import IOLoop
      from tornado.queues import Queue
  
      q = Queue(maxsize=2)
  
      async def consumer():
          async for item in q:
              try:
                  print('Doing work on %s' % item)
                  await asyncio.sleep(0.01)
              finally:
                  q.task_done()
  
      async def producer():
          for item in range(5):
              await q.put(item)
              print('Put %s' % item)
  
      async def main():
          # Start consumer without waiting (since it never finishes).
          IOLoop.current().spawn_callback(consumer)
          await producer()     # Wait for producer to put all tasks.
          await q.join()       # Wait for consumer to finish all tasks.
          print('Done')
  
      asyncio.run(main())
  
  .. testoutput::
  
      Put 0
      Put 1
      Doing work on 0
      Put 2
      Doing work on 1
      Put 3
      Doing work on 2
      Put 4
      Doing work on 3
      Doing work on 4
      Done
  
  
  In versions of Python without native coroutines (before 3.5),
  ``consumer()`` could be written as::
  
      @gen.coroutine
      def consumer():
          while True:
              item = yield q.get()
              try:
                  print('Doing work on %s' % item)
                  yield gen.sleep(0.01)
              finally:
                  q.task_done()
  
  .. versionchanged:: 4.3
     Added ``async for`` support in Python 3.5.
class_docstr_tok: ["Coordinate","producer","and","consumer","coroutines",".","If","maxsize","is","0","(","the","default",")","the","queue","size","is","unbounded",".","..","testcode",":",":","import","asyncio","from","tornado.ioloop","import","IOLoop","from","tornado.queues","import","Queue","q","=","Queue","(","maxsize=2",")","async","def","consumer","(",")",":","async","for","item","in","q",":","try",":","print","(","'Doing","work","on","%","s","'","%","item",")","await","asyncio.sleep","(","0.01",")","finally",":","q.task_done","(",")","async","def","producer","(",")",":","for","item","in","range","(","5",")",":","await","q.put","(","item",")","print","(","'Put","%","s","'","%","item",")","async","def","main","(",")",":","#","Start","consumer","without","waiting","(","since","it","never","finishes",")",".","IOLoop.current","(",")",".spawn_callback","(","consumer",")","await","producer","(",")","#","Wait","for","producer","to","put","all","tasks",".","await","q.join","(",")","#","Wait","for","consumer","to","finish","all","tasks",".","print","(","'Done","'",")","asyncio.run","(","main","(",")",")","..","testoutput",":",":","Put","0","Put","1","Doing","work","on","0","Put","2","Doing","work","on","1","Put","3","Doing","work","on","2","Put","4","Doing","work","on","3","Doing","work","on","4","Done","In","versions","of","Python","without","native","coroutines","(","before","3.5",")",",","``","consumer","(",")","``","could","be","written","as",":",":","@","gen.coroutine","def","consumer","(",")",":","while","True",":","item","=","yield","q.get","(",")","try",":","print","(","'Doing","work","on","%","s","'","%","item",")","yield","gen.sleep","(","0.01",")","finally",":","q.task_done","(",")","..","versionchanged",":",":","4.3","Added","``","async","for","``","support","in","Python","3.5","."]
code: def _init(self) -> None:
      self._queue = collections.deque()
  
imports: import collections
  import datetime
  import heapq
  from tornado import gen, ioloop
  from tornado.concurrent import Future, future_set_result_unless_cancelled
  from tornado.locks import Event
  from typing import Union, TypeVar, Generic, Awaitable, Optional
  import typing
label_desc: Use image node_id 13 for calling the Queue obj's underlying member method code with example usage: obj._init() without return types