LRU 缓存 client 对象
chatgpt 的回答:
https://chat.openai.com/share/006234cd-1476-4bd5-843d-26ec27f9ce12
一个例子:
from collections import OrderedDict
class JianGuoYunClient:
def __init__(self, base_url, account, token):
self.base_url = base_url
self.account = account
self.token = token
class LRUCache:
def __init__(self, max_size):
self.max_size = max_size
self.cache = OrderedDict()
def get(self, key):
if key not in self.cache:
return None
self.cache.move_to_end(key)
return self.cache[key]
def put(self, key, value):
if key in self.cache:
self.cache[key] = value
self.cache.move_to_end(key)
else:
if len(self.cache) >= self.max_size:
self.cache.popitem(last=False)
self.cache[key] = value
class JianGuoYunAccountManager(LRUCache):
def __init__(self, max_size, base_url, token):
super().__init__(max_size)
self.base_url = base_url
self.token = token
def get_client(self, jianguoyun_account):
client = self.get(jianguoyun_account)
if client is None:
client = JianGuoYunClient(self.base_url, jianguoyun_account, self.token)
self.put(jianguoyun_account, client)
return client
# Usage
max_cache_size = 2
jianguoyun_base_url = "https://example.com"
jianguoyun_token = "your_token_here"
manager = JianGuoYunAccountManager(max_cache_size, jianguoyun_base_url, jianguoyun_token)
# Get client for a user
jianguoyun_account = "user123"
my_client = manager.get_client(jianguoyun_account)
print(my_client)
# Get client for another user
jianguoyun_account2 = "user456"
my_client2 = manager.get_client(jianguoyun_account2)
print(my_client2)
# Automatically managed LRU cache
print(manager.cache) # You can see which clients are currently cached
# Accessing same client again
my_client3 = manager.get_client(jianguoyun_account)
print(my_client3)
# Automatically managed LRU cache
print(manager.cache) # You can see which clients are currently cached
# Get client for another user, user456 will be deleted
jianguoyun_account3 = "user897"
my_client3 = manager.get_client(jianguoyun_account3)
print(my_client3)
# Automatically managed LRU cache,
print(manager.cache) # You can see which clients are currently cached