class_docstr: Limit an abstract resource
  
  This allows us to track usage of an abstract resource. If the usage of this
  resources goes beyond a defined limit, we can block further execution
  
  Example::
  
      limiter = ResourceLimiter(2)
      limiter.increase(1)
      limiter.increase(2)
      limiter.decrease(1)
  
      # This will block since we're still not below limit
      await limiter.wait_for_available()
class_docstr_tok: ["Limit","an","abstract","resource","This","allows","us","to","track","usage","of","an","abstract","resource",".","If","the","usage","of","this","resources","goes","beyond","a","defined","limit",",","we","can","block","further","execution","Example",":",":","limiter","=","ResourceLimiter","(","2",")","limiter.increase","(","1",")","limiter.increase","(","2",")","limiter.decrease","(","1",")","#","This","will","block","since","we","'re","still","not","below","limit","await","limiter.wait_for_available","(",")"]
docstr: Return True if the limit has been reached
docstr_tok: ["Return","True","if","the","limit","has","been","reached"]
code: def full(self) -> bool:
      """Return True if the limit has been reached"""
      return self.available is not None and not self.available
  
file_path: distributed/distributed/shuffle/_limiter.py
imports: from __future__ import annotations
  import asyncio
  from typing import Generic, TypeVar
  from distributed.metrics import context_meter
label_desc: Use image node_id 4 for calling the ResourceLimiter obj's underlying member method code with example usage: obj.full() and returns: unknown