为 TETR.IO 引入全局速率限制 (#481)

This commit is contained in:
呵呵です
2024-10-19 18:34:56 +08:00
committed by GitHub
parent c0540769c8
commit 61b5fcb137
2 changed files with 6 additions and 4 deletions

View File

@@ -1,5 +1,5 @@
from asyncio import Lock from asyncio import Lock
from datetime import datetime, timezone from datetime import datetime, timedelta, timezone
from typing import ClassVar from typing import ClassVar
from weakref import WeakValueDictionary from weakref import WeakValueDictionary
@@ -9,12 +9,15 @@ from nonebot.log import logger
from yarl import URL from yarl import URL
from ....config.config import config from ....config.config import config
from ....utils.limit import limit
from ....utils.request import Request from ....utils.request import Request
from .schemas.base import FailedModel, SuccessModel from .schemas.base import FailedModel, SuccessModel
UTC = timezone.utc UTC = timezone.utc
request = Request(config.tetris.proxy.tetrio or config.tetris.proxy.main) request = Request(config.tetris.proxy.tetrio or config.tetris.proxy.main)
request.request = limit(timedelta(seconds=1))(request.request)
class Cache: class Cache:

View File

@@ -13,7 +13,6 @@ from nonebot_plugin_orm import get_session
from sqlalchemy import select from sqlalchemy import select
from ....utils.exception import RequestError from ....utils.exception import RequestError
from ....utils.limit import limit
from ....utils.retry import retry from ....utils.retry import retry
from .. import alc from .. import alc
from .. import command as base_command from .. import command as base_command
@@ -84,11 +83,11 @@ def find_special_player(
@scheduler.scheduled_job('cron', hour='0,6,12,18', minute=0) @scheduler.scheduled_job('cron', hour='0,6,12,18', minute=0)
async def get_tetra_league_data() -> None: async def get_tetra_league_data() -> None:
x_session_id = uuid4() x_session_id = uuid4()
limit_by = retry(max_attempts=10, exception_type=RequestError)(limit(timedelta(seconds=1))(by)) retry_by = retry(max_attempts=10, exception_type=RequestError)(by)
prisecter = P(pri=9007199254740991, sec=9007199254740991, ter=9007199254740991) # * from ch.tetr.io prisecter = P(pri=9007199254740991, sec=9007199254740991, ter=9007199254740991) # * from ch.tetr.io
results: list[BySuccessModel] = [] results: list[BySuccessModel] = []
while True: while True:
model = await limit_by('league', Parameter(after=prisecter.to_prisecter(), limit=100), x_session_id) model = await retry_by('league', Parameter(after=prisecter.to_prisecter(), limit=100), x_session_id)
prisecter = model.data.entries[-1].p prisecter = model.data.entries[-1].p
results.append(model) results.append(model)
if len(model.data.entries) < 100: # 分页值 # noqa: PLR2004 if len(model.data.entries) < 100: # 分页值 # noqa: PLR2004