Skip to main content

Across workers shared cache for python3

Project description

Cache Package

Overview

The shared_cache package provides a in-memory storage solution that can be used with FastAPI or any other Python application requiring efficient, inter-process caching.

Internally using the built-in multiprocessing.shared_memory and msgpack.

Installation

pip install shared_cache

Usage

# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Any, Hashable
import asyncio
from .models import Item

from shared_cache import Cache

app = FastAPI()
cache = Cache(maxsize=1_280_000) # in mb

@app.on_event("startup")
async def startup_event():
    await cache.clear()  # Ensure cache is clear at startup

@app.post("/set")
async def set_item(item: Item):
    await cache.set(item.key, item.value)
    return {"message": "Item set successfully"}

@app.get("/get/{key}")
async def get_item(key: string):
    value = await cache.get(key)
    if value is None:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"key": key, "value": value}

@app.delete("/delete/{key}")
async def delete_item(key: Hashable):
    await cache.delete(key)
    return {"message": "Item deleted successfully"}
# In both cases below, all 4 workers will have access to the same cache
uvicorn main:app --workers 4
# or
gunicorn --workers 4 -k uvicorn.workers.UvicornWorker main:app

Testing the Package

To test the Cache package, you can use the provided test suite. The tests include inter-process communication scenarios to ensure that the cache works correctly across multiple processes.

  1. Run the Tests:
    pytest tests/test_between_workers.py
    

Contributing

Contributions are welcome! Please open an issue or submit a pull request on the GitHub repository.

License

This project is licensed under the MIT License.

Contact

For any questions or inquiries, please contact wassef911@gmail.com.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shared_cache-1.0.1.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

shared_cache-1.0.1-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file shared_cache-1.0.1.tar.gz.

File metadata

  • Download URL: shared_cache-1.0.1.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.0

File hashes

Hashes for shared_cache-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ffa561535a12168a5a8db2d4cee68eba1988d933469cf295a56f77957737aa52
MD5 603a489af475215474953940520fb5ad
BLAKE2b-256 3dd0d449ad0eaa9f729c31bc0a1d6acee2e05f2d05dba0b9e042692b211b8e16

See more details on using hashes here.

File details

Details for the file shared_cache-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for shared_cache-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 72e304669ea14fb13b7731887159b7f4f1cd4cac7acd58e60f1d00a90c95fad2
MD5 f59d19e5e152f4b164c005e6d6fc9c0f
BLAKE2b-256 5752c07b46b7a3978d1709c3d128afe5733b18094d1a50c0793009e98ecabbaa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page