cache can_connect for 3 seconds

This commit is contained in:
j 2024-06-08 15:51:30 +01:00
parent 647a8b95bc
commit da30a40fd6
2 changed files with 20 additions and 3 deletions

View file

@ -7,18 +7,20 @@ import netifaces
from zeroconf import (
ServiceBrowser, ServiceInfo, ServiceStateChange
)
from zeroconf.asyncio import AsyncZeroconf
from zeroconf.asyncio import AsyncZeroconf
from tornado.ioloop import PeriodicCallback
import settings
import state
from tor_request import get_opener
from utils import time_cache
import logging
logger = logging.getLogger(__name__)
def can_connect(data):
@time_cache(3)
def can_connect(**data):
try:
opener = get_opener(data['id'])
headers = {
@ -171,6 +173,6 @@ class LocalNodes(dict):
def get_data(self, user_id):
data = self.get(user_id)
if data and can_connect(data):
if data and can_connect(**data):
return data
return None

View file

@ -5,6 +5,7 @@ from datetime import datetime
from io import StringIO, BytesIO
from PIL import Image, ImageFile
import base64
import functools
import hashlib
import json
import os
@ -581,3 +582,17 @@ def iexists(path):
def same_path(f1, f2):
return unicodedata.normalize('NFC', f1) == unicodedata.normalize('NFC', f2)
def time_cache(max_age, maxsize=128, typed=False):
def _decorator(fn):
@functools.lru_cache(maxsize=maxsize, typed=typed)
def _new(*args, __time_salt, **kwargs):
return fn(*args, **kwargs)
@functools.wraps(fn)
def _wrapped(*args, **kwargs):
return _new(*args, **kwargs, __time_salt=int(time.time() / max_age))
return _wrapped
return _decorator