I use cache api to keep model instances, but "@cache_property" isn't work. Now I use the module global var to keep model instances.
赖信桃 <[email protected]> 于2018年6月28日周四 下午1:29写道: > One is cached framework , one is just a better "property". Use cache api > if you want to keep some instances. > On Thu, Jun 28, 2018 at 13:11 林挺滨 <[email protected]> wrote: > >> >> https://docs.djangoproject.com/zh-hans/2.0/ref/utils/#module-django.utils.functional >> Say: >> The cached result will persist as long as the instance does, so if the >> instance is passed around and the function subsequently invoked, the cached >> result will be returned. >> >> https://docs.djangoproject.com/zh-hans/2.0/topics/cache/ Say: >> You can cache any Python object that can be pickled safely: strings, >> dictionaries, lists of model objects, and so forth. >> >> Then I use cache API to cache the model instance, "cached result" of the >> instance should be cached together. >> >> - What is the problem? >> >> >> 赖信桃 <[email protected]> 于2018年6月28日周四 上午11:44写道: >> >>> Django's cached framework and @cached_property are two different things, >>> though both has "cached" it doesn't mean that they share memory.... >>> >>> https://docs.djangoproject.com/zh-hans/2.0/topics/cache/ >>> >>> https://docs.djangoproject.com/zh-hans/2.0/ref/utils/#module-django.utils.functional >>> >>> Read the docs. >>> >>> 林挺滨 <[email protected]>于2018年6月28日周四 上午10:31写道: >>> >>>> class Log(models.Model): >>>> type = models.CharField(max_length=200, unique=True) >>>> column = SortedManyToManyField(Column, blank=True) >>>> min_column_cnt = models.IntegerField(blank=True, default=0, >>>> help_text='0 equal NULL') >>>> >>>> @cached_property >>>> def column_list_name(self): >>>> return [col.name for col in self.column.all()] >>>> >>>> @cached_property >>>> def column_len(self): >>>> return len(self.column.all()) >>>> >>>> @cached_property >>>> def get_all_column_checker(self): >>>> column_ids = [c.id for c in self.column.all()] >>>> return >>>> ColumnChecker.objects.select_related('column').filter(column_id__in=column_ids) >>>> >>>> >>>> def get_log_attr(log_type): >>>> global log_attr_dict, log_attr_last_update_ts >>>> if (datetime.now() - log_attr_last_update_ts).total_seconds() < >>>> update_log_attr_interval and \ >>>> log_type in log_attr_dict: >>>> return log_attr_dict[log_type] >>>> log_attr_dict[log_type] = >>>> Log.objects.prefetch_related('column').get(type=log_type) >>>> log_attr_last_update_ts = datetime.now() >>>> return log_attr_dict[log_type] >>>> >>>> >>>> Now I use module global var "log_attr_dict" to cache the Log instance, >>>> @cached_property of the instance is work. >>>> >>>> def get_log_attr(log_type): >>>> log_attr = cache.get(log_type) >>>> if not log_attr: >>>> log_attr = >>>> Log.objects.prefetch_related('column').get(type=log_type) >>>> cache.set(log_type, log_attr, update_log_attr_interval) >>>> return log_attr >>>> >>>> >>>> But if I use cache api to cache the Log instance, @cache_property of >>>> the instance isn't work. (I use the local memory cache.) >>>> >>>> 赖信桃 <[email protected]> 于2018年6月27日周三 下午9:07写道: >>>> >>>>> Show me your code snippet. >>>>> >>>>> 林挺滨 <[email protected]>于2018年6月27日周三 下午8:44写道: >>>>> >>>>>> When I use cache framework api to cache a model instance, >>>>>> @cached_property >>>>>> of the instance doesn't work. Why? >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Django users" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> To post to this group, send email to [email protected]. >>>>>> Visit this group at https://groups.google.com/group/django-users. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/django-users/5b27fa47-c712-460f-a421-1eb1d41c764e%40googlegroups.com >>>>>> <https://groups.google.com/d/msgid/django-users/5b27fa47-c712-460f-a421-1eb1d41c764e%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Django users" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> Visit this group at https://groups.google.com/group/django-users. >>>>> >>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/django-users/CAMv51WQMrueCfWoBV3a0Djr7QhL3mqXcg_Ak5yNt75%3DP2Vy4WA%40mail.gmail.com >>>>> <https://groups.google.com/d/msgid/django-users/CAMv51WQMrueCfWoBV3a0Djr7QhL3mqXcg_Ak5yNt75%3DP2Vy4WA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>> >>>> >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> >>>> -- >>>> 祝您 身体健康 >>>> 工作愉快! >>>> >>>> 林挺滨 >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Django users" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To post to this group, send email to [email protected]. >>>> Visit this group at https://groups.google.com/group/django-users. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/django-users/CAGdZMg8v2mp%3DOiO3coBFypGZ5O%2B_FLC_5cfnK94CRXax0OHRYw%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/django-users/CAGdZMg8v2mp%3DOiO3coBFypGZ5O%2B_FLC_5cfnK94CRXax0OHRYw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/django-users. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/django-users/CAMv51WTfACztXVaoCv6GgdJBEBh8KKhdfZXHQRYw4d%2BBC_2rOQ%40mail.gmail.com >>> <https://groups.google.com/d/msgid/django-users/CAMv51WTfACztXVaoCv6GgdJBEBh8KKhdfZXHQRYw4d%2BBC_2rOQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >> >> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> -- >> 祝您 身体健康 >> 工作愉快! >> >> 林挺滨 >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at https://groups.google.com/group/django-users. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/CAGdZMg83qVXpLSCPSkDvvJt%3DmEc%2BRLdjRTxyXdwNjdv4Fy%3DpMg%40mail.gmail.com >> <https://groups.google.com/d/msgid/django-users/CAGdZMg83qVXpLSCPSkDvvJt%3DmEc%2BRLdjRTxyXdwNjdv4Fy%3DpMg%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CAMv51WTxDj8du2RKgWo%3DD1o5a0O5k1C5E2V1xHPDooc%3DUv662Q%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CAMv51WTxDj8du2RKgWo%3DD1o5a0O5k1C5E2V1xHPDooc%3DUv662Q%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- 祝您 身体健康 工作愉快! 林挺滨 -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAGdZMg8BfsvcqggHwtSwE%3DP_kZCLeXLV_a%2BZoe3WmE%3DiFveQpQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

