darts.util.lru

Eenvoudig woordenboek met LRU-gedrag
Download nu

darts.util.lru Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • MIT/X Consortium Lic...
  • Naam uitgever:
  • Deterministic Arts

darts.util.lru Tags


darts.util.lru Beschrijving

Eenvoudig woordenboek met LRU-gedrag darts.util.lru is een eenvoudig woordenboek met LRU behavior.LRU Woordenboeken >>> van darts.lib.utils.lru invoer LRUDictAn LRUDict is in feite een eenvoudig woordenboek, dat een gedefinieerde maximale capaciteit, dat ten bouwtijd kan worden geleverd heeft, of gewijzigd op run-time via de eigenschap capaciteit: >>> cache = LRUDict (1) >>> cache.capacity1The minimale capaciteitswaarde is 1 en LRU dicts klaagt wanneer iemand probeert om een waarde kleiner dan gebruiken> >> cache.capacity = -1 #doctest: + ELLIPSISTraceback (meest recente oproep vorige): ... ValueError: -1 is geen geldige capaciteit >>> LRUDict (-1) #doctest: + ELLIPSISTraceback (meest recente oproep vorige ): ... ValueError: -1 is geen geldige capacityLRU woordenboeken kan nooit meer elementen dan hun capaciteit waarde bevatten aangeeft, dus: >>> cache = "First" >>> cache = "Second" >>> len (cache) 1In om dit gedrag te garanderen, zal het woordenboek inzendingen uit te zetten als het nodig om ruimte te maken voor nieuwe. Dus: >>> 1 in cacheFalse >>> 2 in cacheTrueThe capaciteit kan worden ingesteld op run-time. Kweken van de capaciteit heeft geen invloed op het aantal elementen in een LRU woordenboek: >>> cache.capacity = 3 >>> len (cache) 1 >>> cache = "First" >>> cache = "derde" >>> len (cache) 3but doet krimpen: >>> cache.capacity = 2 >>> len (cache) 2 >>> gesorteerde (lijst (cache.iterkeys ())) Let op, dat de invoer met toets 2 is uitgezet, want het was de oudste invoer op het moment van de wijziging van de capaciteit. De nieuwe oudste vermelding is degene met de sleutel 1, die kan worden gezien, wanneer we proberen om een ander item aan de dict toe te voegen: >>> cache = "Vierde" >>> gesorteerd (lijst (cache.iterkeys () )) de volgende bewerkingen van invloed prioriteit van een vermelding: - `get`-` __getitem__`- `__setitem__`-` __contains__`Calling een van deze bewerkingen op een bestaande sleutel zal prioriteit van de sleutel te stimuleren, waardoor het onwaarschijnlijk te krijgen uitgezet, wanneer het woordenboek behoeften om ruimte voor nieuwe items te maken. Er is een speciale blik operatie, die de huidige waarde geassocieerd met een sleutel terug zonder het stimuleren van de prioriteit van het item: >>> cache.peek (3) 'Third' >>> cache = "Vijfde" >>> gesorteerde (lijst (cache.iterkeys ())) zoals u kunt zien, hoewel we benaderd de invoer met toets 3 als de laatste, de ingang is nu verdwenen, omdat het geen prioriteit boost van kregen de oproep om peek.The klasse LRUDict ondersteunt een subset van de standaard Python dict interface. In het bijzonder kunnen we itereren over de sleutel, waarden en onderdelen van een LRU dict: >>> gesorteerde () >>> gesorteerd () >>> gesorteerd () >>> gesorteerd (lijst (cache)) Let op, dat er geen gegarandeerde orde; in het bijzonder zijn de elementen niet in prioriteitsvolgorde of somesuch gegenereerd. Net als bij reguliere dict`s, een LRU dict's `__iter__ is eigenlijk geen alias voor iterkeys.Furthermore, we kunnen alle elementen uit de dict verwijderen: >>> cache.clear () >>> naargelang (lijst (cache.iterkeys () )) [] Thread-safetyInstances van klasse LRUDict zijn niet thread safe. Erger: zelfs gelijktijdige alleen-lezen toegang niet thread-veilige en gesynchroniseerd te worden door de klant application.Auto laden caches >>> van darts.lib.utils.lru invoer AutoLRUCacheLet eerste belasting functie definiëren: >>> def load_resource (key): ... als sleutel <10: print "loading% r" % (toets) return "r (% s)" % (sleutel) en een cache:>>> cache = AutoLRUCache (load_resource, capaciteit = 3) >>> cache.load (1) Laden 1'R (1) '>>> cache.load (1)' R (1) 'Zoals u kunt zien, de eerste keer en een effectief element wordt geladen, de lading functie verschaft aan de constructor wordt genoemd, teneinde de werkelijke bron waarde. Bij volgende aanroepen belasting, in de cache waarde returned.Internally, de AutoLRUCache klasse maakt gebruik van een LRUDict cache waarden, dus: >>> cache.load (2) Laden 2'R (2) ">>> cache.load ( 3) Laden 3'R (3) >>> cache.load (4) laden 4'R (4) >>> cache.load (1) Laden 1'R (1) Merk de "geladen 1" lijn in het laatste voorbeeld. De cache is geïnitialiseerd met een capaciteit van 3, zodat de waarde van de sleutel 1 moest worden uitgezet wanneer een voor toets 4 werd geladen. Toen we probeerden om weer te verkrijgen 1, de cache moest nu herladen, roepende de loader function.If er eigenlijk geen bron voor een bepaalde sleutel waarde, moet de lader functie Geen terugkeren. Hieruit volgt, dat Geen is nooit een geldige resource waarde geassocieerd te worden met een aantal belangrijke in een AutoLRUCache. >>> cache.load (11, 'Oeps') 'Oops'Thread-safetyInstances van klasse AutoLRUCache zijn volledig thread safe. Wees gewaarschuwd, echter, dat de lader functie buiten een synchronisatie toepassingsgebied van de klasse kan inwendig gebruiken heet, en heeft zijn eigen synchronisatie verstrekken als required.The cache klasse probeert eigenlijk om het aantal aanroepen van de lader een minimum te beperken door ervoor te zorgen, dat geen twee gelijktijdige threads zal proberen om dezelfde sleutel waarde te laden (hoewel elk aantal gelijktijdige threads drukke laden misschien wel de middelen in verband met verschillende sleutels). Vereisten: · Python


darts.util.lru Gerelateerde software