tas de chiens
Dogpile se compose de deux sous-systèmes, l'un se superposant l'un à l'autre.
dogpile
fournit le concept de "dogpile lock", une structure de contrôle qui permet à un seul thread d'exécution d'être sélectionné comme "créateur" d'une ressource, tout en permettant à d'autres threads d'exécution de faire référence à la version précédente de cette ressource en tant que "créateur" d'une ressource. la création continue ; s'il n'y a pas de version précédente, ces threads se bloquent jusqu'à ce que l'objet soit disponible.
dogpile.cache
est une API de mise en cache qui fournit une interface générique pour la mise en cache des backends de toute variété, et fournit en outre des hooks API qui intègrent ces backends de cache au mécanisme de verrouillage de dogpile
.
Dans l'ensemble, dogpile.cache est destiné à remplacer le système de mise en cache Beaker, dont les composants internes sont écrits par le même auteur. Toutes les idées de Beaker qui "fonctionnent" sont réimplémentées dans dogpile.cache d'une manière plus efficace et succincte, et toutes les idées grossières (les éléments internes de Beaker ont été écrits pour la première fois en 2005) reléguées à la poubelle.
Documentation
Consultez la documentation complète de dogpile.cache sur la documentation de dogpile.cache. Les sections ci-dessous fournissent un bref résumé des packages dogpile
.
Caractéristiques
- Une API succincte qui encourage la configuration initiale de « régions » prédéfinies, chacune définissant un ensemble de caractéristiques de mise en cache, notamment le backend de stockage, les options de configuration et le délai d'expiration par défaut.
- Une API standard get/set/delete ainsi qu'une API de décorateur de fonctions sont fournies.
- Les mécanismes de génération de clés sont entièrement personnalisables. L'API du décorateur de fonctions comprend un « générateur de clés » enfichable pour personnaliser la façon dont les clés de cache sont faites pour correspondre aux appels de fonction, et une fonctionnalité facultative de « mangler de clés » permet une manipulation enfichable des clés (telles que l'encodage, le hachage SHA-1) comme vous le souhaitez. pour chaque région.
- Le verrou dogpile, développé pour la première fois comme moteur principal derrière le système de mise en cache Beaker, est ici considérablement simplifié, amélioré et mieux testé. Certains problèmes de performances clés intrinsèques à l'architecture de Beaker, en particulier le fait que les valeurs étaient fréquemment « extraites deux fois » du cache, ont été corrigés.
- Les backends implémentent leur propre version d'un verrou « distribué », où la « distribution » correspond au système de stockage du backend. Par exemple, les backends memcached permettent à tous les clients de coordonner la création de valeurs en utilisant memcached lui-même. Le backend du fichier dbm utilise un fichier de verrouillage à côté du fichier dbm. Les nouveaux backends, tels qu'un backend basé sur Redis, peuvent fournir leur propre mécanisme de verrouillage adapté au moteur de stockage.
- L'écriture de nouveaux backends ou le piratage des backends existants est censé être une routine - tout ce qui est nécessaire, ce sont des méthodes de base get/set/delete. Un verrou distribué adapté au backend est un ajout facultatif, sinon dogpile utilise un mutex de thread régulier. Les nouveaux backends peuvent être enregistrés directement auprès de dogpile.cache ou mis à disposition via les points d'entrée setuptools.
- Les backends inclus comprennent trois backends memcached (python-memcached, pylibmc, bmemcached), un backend Redis, un backend basé sur anydbm de Python et un backend de dictionnaire simple.
- Espace pour les plugins tiers, dont un qui fournit le moteur dogpile.cache aux modèles Mako.
Le projet SQLAlchemy
Dogpile fait partie du projet SQLAlchemy et adhère aux mêmes normes et conventions que le projet principal.
Développement / Rapport de bugs / Pull request
Veuillez vous référer au Guide de la communauté SQLAlchemy pour obtenir des directives sur le codage et la participation à ce projet.
Code de conduite
Avant tout, SQLAlchemy accorde une grande importance à une communication polie, réfléchie et constructive entre les utilisateurs et les développeurs. Veuillez consulter notre code de conduite actuel sur Code de conduite.
Licence
Dogpile est distribué sous licence MIT.