class_docstr: Implements a pseudo-LRU algorithm (CLOCK) with expiration times
  
  The Clock algorithm is not kept strictly to improve performance, e.g. to
  allow get() and invalidate() to work without acquiring the lock.
class_docstr_tok: ["Implements","a","pseudo-LRU","algorithm","(","CLOCK",")","with","expiration","times","The","Clock","algorithm","is","not","kept","strictly","to","improve","performance",",","e.g",".","to","allow","get","(",")","and","invalidate","(",")","to","work","without","acquiring","the","lock","."]
docstr: Remove key from the cache
docstr_tok: ["Remove","key","from","the","cache"]
code: def invalidate(self, key):
      """Remove key from the cache"""
      # pop with default arg will not raise KeyError
      entry = self._data.pop(key, _MARKER)
      if entry is not _MARKER:
          # We have no lock, but worst thing that can happen is that we
          # set another key's entry to False.
          self.clock_refs[entry[0]] = False
  
imports: from abc import abstractmethod
  from abc import ABCMeta
  import threading
  import time
  import uuid
  import inspect
label_desc: Use image node_id 5 for calling the ExpiringLRUCache obj's underlying member method code with example usage: obj.invalidate(key) without return types