modify: 修改重试逻辑

This commit is contained in:
2025-11-05 13:05:57 +08:00
parent 8745db8ab1
commit 05ed2745b0
6 changed files with 54 additions and 23 deletions
+1 -1
View File
@@ -1 +1 @@
3.13
3.11
+18 -10
View File
@@ -13,7 +13,7 @@ classifiers = [
"Operating System :: POSIX :: Linux",
]
dependencies = [
"queue_sqlite_core>=0.2.0",
"queue-sqlite-core>=0.2.0",
]
description = "A high-performance, SQLite-based distributed task queue system with Rust-backed core operations. Supports task mounting, message listening, priority handling, retry mechanisms, and automatic cleanup of expired messages. Ideal for building reliable, scalable background task processing systems."
name = "queue-sqlite"
@@ -22,13 +22,13 @@ requires-python = ">=3.11"
version = "0.2.1"
[project.optional-dependencies]
pyside6 = ["qtpy", "PySide6"]
pyqt6 = ["qtpy", "PyQt6"]
pyqt5 = ["qtpy", "PyQt5"]
pyqt6 = ["qtpy", "PyQt6"]
pyside6 = ["qtpy", "PySide6"]
[[tool.uv.index]]
default = true
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
# [[tool.uv.index]]
# default = true
# url = "https://pypi.tuna.tsinghua.edu.cn/simple"
[build-system]
build-backend = "hatchling.build"
@@ -36,11 +36,19 @@ requires = ["hatchling"]
[dependency-groups]
dev = [
"maturin>=1.9.4",
"psutil>=7.0.0",
"pytest>=7.4.4",
"twine>=4.0.2",
"maturin>=1.9.4",
"psutil>=7.0.0",
"pytest>=7.4.4",
"twine>=4.0.2",
]
[tool.hatch.build.targets.wheel]
packages = ["src/queue_sqlite"]
[tool.uv.workspace]
members = [
"src/queue_sqlite_core",
]
[tool.uv.sources]
queue-sqlite-core = { workspace = true }
+8 -5
View File
@@ -11,12 +11,13 @@
from ..model import MessageItem
from ..constant import MessageStatus
from ..mounter.task_mounter import TaskMeta
import json
import asyncio
import functools
def retry_async(max_retries=3, delay=1):
def retry_async(max_retries=3):
"""
异步重试装饰器
@@ -30,8 +31,10 @@ def retry_async(max_retries=3, delay=1):
async def wrapper(self, *args, **kwargs):
last_exception = None
# 使用message_item中的retry_count作为最大重试次数
retries = getattr(self.message_item, "retry_count", max_retries)
task_meta: TaskMeta = self.callback.meta
retries = task_meta.max_retries
# retries = getattr(self.message_item, "retry_count", max_retries)
delay_time = task_meta.delay
# 至少尝试一次(retries+1),最多尝试max_retries+1次
actual_retries = min(retries, max_retries) if max_retries > 0 else retries
@@ -41,7 +44,7 @@ def retry_async(max_retries=3, delay=1):
except Exception as e:
last_exception = e
if attempt < actual_retries:
await asyncio.sleep(delay)
await asyncio.sleep(delay_time)
else:
break
if last_exception:
@@ -62,7 +65,7 @@ class AsyncTaskCycle:
self.task_status = None
self.task_error = None
@retry_async(max_retries=3, delay=1)
@retry_async(max_retries=3)
async def run(self):
try:
task_result = await self.callback(self.message_item) # type: ignore
+9 -5
View File
@@ -12,13 +12,14 @@
from ..model import MessageItem
from typing import Callable, Optional
from ..constant import MessageStatus
from ..mounter.task_mounter import TaskMeta
import json
import functools
import time
def retry_sync(max_retries=3, delay=1):
def retry_sync(max_retries=3):
"""
同步重试装饰器
@@ -32,8 +33,10 @@ def retry_sync(max_retries=3, delay=1):
def wrapper(self, *args, **kwargs):
last_exception = None
# 使用message_item中的retry_count作为最大重试次数
retries = getattr(self.message_item, "retry_count", max_retries)
task_meta: TaskMeta = self.callback.meta
retries = task_meta.max_retries
# retries = getattr(self.message_item, "retry_count", max_retries)
delay_time = task_meta.delay
# 至少尝试一次(retries+1),最多尝试max_retries+1次
actual_retries = min(retries, max_retries) if max_retries > 0 else retries
@@ -42,8 +45,9 @@ def retry_sync(max_retries=3, delay=1):
return func(self, *args, **kwargs)
except Exception as e:
last_exception = e
self.message_item.retry_count = attempt
if attempt < actual_retries:
time.sleep(delay)
time.sleep(delay_time)
else:
break
@@ -66,7 +70,7 @@ class TaskCycle:
self.task_status = None
self.task_error = None
@retry_sync(max_retries=3, delay=1)
@retry_sync(max_retries=3)
def run(self):
try:
task_result = self.callback(self.message_item) # type: ignore
+17 -1
View File
@@ -10,6 +10,15 @@
from typing import Callable, List
from dataclasses import dataclass, field
@dataclass
class TaskMeta:
name: str = field(default="", metadata={"help": "任务名称"})
description: str = field(default="", metadata={"help": "任务描述"})
max_retries: int = field(default=3, metadata={"help": "任务最大重试次数"})
delay: float = field(default=1, metadata={"help": "任务延迟执行时间"})
class TaskMounter:
@@ -23,7 +32,14 @@ class TaskMounter:
def decorator(function: Callable):
# 使用自定义名称或函数原名
function.meta = meta # type: ignore
name = meta.get("name", function.__name__)
description = meta.get("description", "")
max_retries = meta.get("max_retries", 3)
delay = meta.get("delay", 1)
task_meta = TaskMeta(
name=name, description=description, max_retries=max_retries, delay=delay
)
function.meta = task_meta # type: ignore
setattr(TaskMounter, function.__name__, function)
return function
+1 -1
View File
@@ -19,7 +19,7 @@ features = ["pyo3/extension-module"]
[[tool.uv.index]]
default = true
url = "http://124.71.68.6:3141/root/pypi"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
[dependency-groups]
dev = [