Metadata-Version: 2.1
Name: jitcache
Version: 0.32
Summary: jitcache is a just-in-time key-value cache that isthread/process safe
Home-page: https://github.com/sjtrny/jitcache
Author: Stephen Tierney
Author-email: sjtrny@gmail.com
License: UNKNOWN
Keywords: cache jit key value dictionary thread process
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Requires-Python: >=3
Description-Content-Type: text/markdown

[![Build Status](https://travis-ci.org/sjtrny/jitcache.svg?branch=master)](https://travis-ci.org/sjtrny/jitcache)
[![Documentation Status](https://readthedocs.org/projects/jitcache/badge/?version=latest)](https://jitcache.readthedocs.io/en/latest/?badge=latest)
[![Downloads](https://pepy.tech/badge/jitcache)](https://pepy.tech/project/jitcache)

# jitcache

jitcache is a just-in-time key-value cache that is thread/process safe. jitcache also prevents repeated computation
when multiple workers request the same value.

jitcache was designed to improve the performance of Plot.ly Dash apps by caching results and reducing CPU load.

Installation
-------------------

Install via pip:

    $ pip install jitcache

Documentation
-------------------

Full documentation available here [https://jitcache.readthedocs.io/](https://jitcache.readthedocs.io/en/latest/)

Basic Usage
-------------------

    from jitcache import Cache
    import time


    cache = Cache()


    @cache.memoize
    def slow_fn(input_1, input_2, input_3=10):
        print("Slow Function Called")
        time.sleep(1)
        return input_1 * input_2 * input_3


    print(slow_fn(10, 2))


 Output:

    Slow Function Called
    40


Plot.ly Dash Usage
-------------------

    import dash
    import dash_html_components as html
    from jitcache import Cache
    import dash_core_components as dcc


    cache = Cache()

    app = dash.Dash(__name__)

    server = app.server
    app.layout = html.Div(
        children=[
            html.Div(id="output-container-dropdown1", children=[]),
            html.Div(id="output-container-dropdown2", children=[]),
            dcc.Dropdown(
                options=[
                    {"label": "New York City", "value": "NYC"},
                    {"label": "Montréal", "value": "MTL"},
                    {"label": "San Francisco", "value": "SF"},
                ],
                value="MTL",
                id="dropdown",
            ),
        ]
    )


    @app.callback(
        dash.dependencies.Output("output-container-dropdown1", "children"),
        [dash.dependencies.Input("dropdown", "value")],
    )
    @cache.memoize
    def update_output1(input_dropdown):
        print("run1")

        return input_dropdown


    @app.callback(
        dash.dependencies.Output("output-container-dropdown2", "children"),
        [dash.dependencies.Input("dropdown", "value")],
    )
    @cache.memoize
    def update_output2(input_dropdown):
        print("run2")

        return input_dropdown


    if __name__ == "__main__":
        app.run_server(debug=True)


