Wait!
I made a mistake... It seems to be solve... Should be the pointer... My
last error was here (in red):
if form.process().accepts:
del(globals()['cached_dict'])
return_cached_dict(900)
Should be 0
Also move the del in my factory :
def return_cached_dict(update_cached_dict_if_elapsed_time=900):
del(globals()['cached_dict'])
global cached_dict
cached_dict = cache.ram('cached_dict',
lambda: {r[0]: r[1] for r in
db.executesql("""SQL Query""")
},
time_expire=update_cached_dict
_if_elapsed_time)
Then :
if form.process().accepts:
return_cached_dict(0)
Richard
On Tue, Feb 18, 2014 at 3:53 PM, Derek <[email protected]> wrote:
> You are using the 'examples' to make your cache. That's good that you are
> following the examples, but you really should start by reading the book
> first.
>
> http://web2py.com/book/default/chapter/04#cache
>
> It's explained here what's happening and what you can do to invalidate the
> cache and special cases.
>
>
>
> On Monday, February 17, 2014 1:41:29 PM UTC-7, Richard wrote:
>>
>> Hello,
>>
>> I have an issue with app design and global variable cached python dict...
>>
>> I use web2py 2.4.7
>>
>> I use to create cached python dict in models like so :
>>
>> update_cached_dict_if_elapsed_time = 900
>> cached_dict = cache.ram('cached_dict',
>> lambda: {r[0]: r[1] for r in
>> db.executesql("""...""")},
>> time_expire=update_cached_
>> dict_if_elapsed_time)
>>
>> cached_dict is a for representation of a given table ids... It intent to
>> reduce the number of requests that hit the database by using python dict as
>> much as possible...
>>
>> But I got in trouble trying to update this dict with
>> update_cached_dictt_if_elapsed_time... First as cached_dict this
>> variable is in globals, so I use to add more logic around the
>> update_cached_dict_if_elapsed_time var like so :
>>
>>
>> update_cached_dict_if_elapsed_time = None
>> if update_cached_dict_if_elapsed_time == 0:
>> pass
>> elif request.args(0) == 'table_name' and request.function == 'create' and
>> request.post_vars:
>> update_cached_dict_if_elapsed_time = 0
>>
>> I find this cumbersome and prone to error because if I have other thing
>> that should trigger a dict update, I have to add more logic...
>>
>> So, I though I could make factory dict function like so :
>>
>> def factory_cached_dict(update_cached_dict_if_elapsed_time=900):
>> global
>> cached_dict
>> cached_dict = cache.ram('cached_dict',
>> lambda: {r[0]: r[1] for r in
>> db.executesql("""...""")},
>> time_expire=update_cached_
>> dict_if_elapsed_time)
>>
>> factory_cached_dict(900)
>>
>> Above is in models...
>>
>> Then I though I could just update my global cached_dict var from any
>> controller like so :
>>
>> if form.process().accepts:
>> factory_cached_dict(0) # Because in this form I just add a value to
>> the table use to create the python dict
>>
>> But I am really desapointed it not seems to work because I still
>> experiment issue with not up to date cached_dict because there is missing
>> key value pairs for id and it representation.
>>
>> I think the issue is that even if I call the factory after form submit
>> the dict get recreated at each request by the factory call in models or
>> there is something else going on that I don't understand (maybe issue with
>> cache in web2py in web2py 2.4.7??)
>>
>> Thanks for any help.
>>
>> Richard
>>
> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.