|
2842 | 2842 | }, |
2843 | 2843 | { |
2844 | 2844 | "cell_type": "code", |
2845 | | - "execution_count": 1, |
| 2845 | + "execution_count": null, |
| 2846 | + "metadata": {}, |
| 2847 | + "outputs": [], |
| 2848 | + "source": [ |
| 2849 | + "d = dict(a=1,b=2)" |
| 2850 | + ] |
| 2851 | + }, |
| 2852 | + { |
| 2853 | + "cell_type": "code", |
| 2854 | + "execution_count": null, |
| 2855 | + "metadata": {}, |
| 2856 | + "outputs": [], |
| 2857 | + "source": [ |
| 2858 | + "d.popitem()" |
| 2859 | + ] |
| 2860 | + }, |
| 2861 | + { |
| 2862 | + "cell_type": "code", |
| 2863 | + "execution_count": null, |
2846 | 2864 | "metadata": {}, |
2847 | 2865 | "outputs": [], |
2848 | 2866 | "source": [ |
|
2853 | 2871 | " cache,states = {}, [None]*len(funcs)\n", |
2854 | 2872 | " @wraps(func)\n", |
2855 | 2873 | " def wrapper(*args, **kwargs):\n", |
2856 | | - " key = str(args) + str(kwargs)\n", |
| 2874 | + " key = f\"{args} // {kwargs}\"\n", |
2857 | 2875 | " if key in cache:\n", |
2858 | | - " result, states = cache[key]\n", |
2859 | | - " if not any(func(state) for func, state in zip(funcs, states)):\n", |
| 2876 | + " result,states = cache[key]\n", |
| 2877 | + " if not any(f(state) for f,state in zip(funcs, states)):\n", |
2860 | 2878 | " cache[key] = cache.pop(key)\n", |
2861 | 2879 | " return result\n", |
2862 | 2880 | " del cache[key]\n", |
2863 | | - " result = func(*args, **kwargs)\n", |
2864 | | - " cache[key] = (result, [func(None) for func in funcs])\n", |
2865 | | - " if len(cache) > maxsize: cache.pop(next(iter(cache)))\n", |
2866 | | - " return result\n", |
| 2881 | + " try: newres = func(*args, **kwargs)\n", |
| 2882 | + " except:\n", |
| 2883 | + " if key not in cache: raise\n", |
| 2884 | + " cache[key] = cache.pop(key)\n", |
| 2885 | + " return result\n", |
| 2886 | + " cache[key] = (newres, [f(None) for f in funcs])\n", |
| 2887 | + " if len(cache) > maxsize: cache.popitem()\n", |
| 2888 | + " return newres\n", |
2867 | 2889 | " return wrapper\n", |
2868 | 2890 | " return _f" |
2869 | 2891 | ] |
|
2877 | 2899 | }, |
2878 | 2900 | { |
2879 | 2901 | "cell_type": "code", |
2880 | | - "execution_count": 2, |
| 2902 | + "execution_count": null, |
2881 | 2903 | "metadata": {}, |
2882 | 2904 | "outputs": [], |
2883 | 2905 | "source": [ |
|
2892 | 2914 | }, |
2893 | 2915 | { |
2894 | 2916 | "cell_type": "code", |
2895 | | - "execution_count": 3, |
| 2917 | + "execution_count": null, |
2896 | 2918 | "metadata": {}, |
2897 | 2919 | "outputs": [], |
2898 | 2920 | "source": [ |
|
2960 | 2982 | "metadata": {}, |
2961 | 2983 | "outputs": [], |
2962 | 2984 | "source": [ |
2963 | | - "@timed_cache(seconds=0.1, maxsize=2)\n", |
| 2985 | + "@timed_cache(seconds=0.01, maxsize=2)\n", |
2964 | 2986 | "def cached_func(x): return x * 2, time()\n", |
2965 | 2987 | "\n", |
2966 | 2988 | "# basic caching\n", |
2967 | 2989 | "result1, time1 = cached_func(2)\n", |
2968 | 2990 | "test_eq(result1, 4)\n", |
2969 | | - "sleep(0.01)\n", |
| 2991 | + "sleep(0.001)\n", |
2970 | 2992 | "result2, time2 = cached_func(2)\n", |
2971 | 2993 | "test_eq(result2, 4)\n", |
2972 | 2994 | "test_eq(time1, time2)\n", |
|
2983 | 3005 | "test_ne(time3_new, time())\n", |
2984 | 3006 | "\n", |
2985 | 3007 | "# time expiration\n", |
2986 | | - "sleep(0.2)\n", |
| 3008 | + "sleep(0.05)\n", |
2987 | 3009 | "_, time4_new = cached_func(4)\n", |
2988 | 3010 | "test_ne(time4_new, time())" |
2989 | 3011 | ] |
|
3018 | 3040 | "split_at_heading": true |
3019 | 3041 | }, |
3020 | 3042 | "kernelspec": { |
3021 | | - "display_name": "Python 3 (ipykernel)", |
| 3043 | + "display_name": "python3", |
3022 | 3044 | "language": "python", |
3023 | 3045 | "name": "python3" |
3024 | | - }, |
3025 | | - "language_info": { |
3026 | | - "codemirror_mode": { |
3027 | | - "name": "ipython", |
3028 | | - "version": 3 |
3029 | | - }, |
3030 | | - "file_extension": ".py", |
3031 | | - "mimetype": "text/x-python", |
3032 | | - "name": "python", |
3033 | | - "nbconvert_exporter": "python", |
3034 | | - "pygments_lexer": "ipython3", |
3035 | | - "version": "3.11.8" |
3036 | 3046 | } |
3037 | 3047 | }, |
3038 | 3048 | "nbformat": 4, |
|
0 commit comments