Ale*_*lig 2 python caching python-3.x
在这个类中,我有一个方法,我使用它缓存它的结果cachetools:
from cachetools import cached, TTLCache
class Log:
@cached(TTLCache(maxsize=200, ttl=300))
def get_sessions(self, user_id):
query = """select * from comprehensive_log.sessions where user_id = %s order by start DESC limit 50"""
user_sessions = self.fetch_data_from_log(query, (user_id,))
return user_sessions
def get_last_session(self, user_id_arg):
user_sessions = self.get_sessions(user_id_arg)
...
Run Code Online (Sandbox Code Playgroud)
我在这个文件中调用这个类sessions.py:
from src.OO_log import Log
log_object = Log()
def get_data():
user_list = get_user_list_from_database()
for user in user_list:
log_object.get_last_session(user.id)
return True
...
Run Code Online (Sandbox Code Playgroud)
现在我在我的中使用get_data方法:sessions.pymain.py
from sessions import get_data()
while the_end:
result = get_data()
# How can I clear cache here before going for the next loop?
Run Code Online (Sandbox Code Playgroud)
我想在每个 while 循环结束后清除缓存。
我尝试像这样更改Log课程__init__:
class Log:
def __init__(self):
self.get_sessions = cached(TTLCache(maxsize=200, ttl=300))(self.get_sessions)
def get_sessions(self, user_id):
query = """select * from comprehensive_log.sessions where user_id = %s order by start DESC limit 50"""
user_sessions = self.fetch_data_from_log(query, (user_id,))
return user_sessions
Run Code Online (Sandbox Code Playgroud)
并result在while循环中删除:
while the_end:
result = get_data()
del result
Run Code Online (Sandbox Code Playgroud)
但他们都没有帮助。
那么我如何cachetools手动清除 python或者我可以做些什么来克服这个问题?
小智 8
您可以将会话存储在类之外的变量中:
_sessions_cache = TTLCache(maxsize=200, ttl=300)
Run Code Online (Sandbox Code Playgroud)
然后只需调用:
_sessions_cache.clear()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1910 次 |
| 最近记录: |