From 1e8ae960cd091d1e0408282b6932d8003b0efd44 Mon Sep 17 00:00:00 2001 From: Tordor <3262978839@qq.com> Date: Thu, 15 Jan 2026 11:10:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- lifespan.py | 7 +++++++ pyproject.toml | 1 + scheduler/__init__.py | 7 +++++++ scheduler/scheduler.py | 9 +++++++++ uv.lock | 18 +++++++++++++++++- 6 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 scheduler/__init__.py diff --git a/.gitignore b/.gitignore index a460751..f781679 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ wheels/ # prod file .sqlite fallback.log -database.db \ No newline at end of file +database.db +fastscheduler_state.json diff --git a/lifespan.py b/lifespan.py index 1d1a569..71dd55f 100644 --- a/lifespan.py +++ b/lifespan.py @@ -10,6 +10,12 @@ def init_database(): create_db_and_tables() logger.info("[数据库] 数据库初始化完成 ✅") +def init_scheduler(app : FastAPI): + from scheduler import init_scheduler_router + logger.info("[定时任务] 初始化定时任务 📦") + init_scheduler_router(app) + logger.info("[定时任务] 定时任务初始化完成 ✅") + def active_config(): logger.info(f"[激活配置] 加载配置 ⚙️") @@ -31,5 +37,6 @@ async def lifespan(app: FastAPI): active_config() init_database() import_router(app) + init_scheduler(app) yield logger.info(f"[生命周期] 应用关闭 🔧✅") diff --git a/pyproject.toml b/pyproject.toml index 966dcd9..9f7d658 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ dependencies = [ "wecom-sdk>=1.0.0", "xmltodict>=1.0.2", "psycopg2-binary>=2.9.11", + "fastscheduler[fastapi]>=0.1.2", ] [dependency-groups] diff --git a/scheduler/__init__.py b/scheduler/__init__.py new file mode 100644 index 0000000..aa03b39 --- /dev/null +++ b/scheduler/__init__.py @@ -0,0 +1,7 @@ +from fastapi import FastAPI +from fastscheduler.fastapi_integration import create_scheduler_routes +from scheduler.scheduler import scheduler + +def init_scheduler_router(app : FastAPI): + app.include_router(create_scheduler_routes(scheduler)) + scheduler.start() \ No newline at end of file diff --git a/scheduler/scheduler.py b/scheduler/scheduler.py index e69de29..6134f52 100644 --- a/scheduler/scheduler.py +++ b/scheduler/scheduler.py @@ -0,0 +1,9 @@ +from fastscheduler import FastScheduler + + +scheduler = FastScheduler(quiet=True) + + +@scheduler.every(10).seconds +def background_task(): + print("Background work") \ No newline at end of file diff --git a/uv.lock b/uv.lock index f0353c9..c94abf7 100644 --- a/uv.lock +++ b/uv.lock @@ -305,6 +305,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/8b/cef8cfed7ed77d52fc772b1c7b966ba019a3f50b65a2b3625a0f3b7f6f53/fastapi_utils-0.8.0-py3-none-any.whl", hash = "sha256:6c4d507a76bab9a016cee0c4fa3a4638c636b2b2689e39c62254b1b2e4e81825", size = 18495, upload-time = "2024-11-11T08:30:01.914Z" }, ] +[[package]] +name = "fastscheduler" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/d0/1d4be557b3b47b74cd9eddf5b6bdf28c91a201c2872b6bce74040b8047f4/fastscheduler-0.1.2.tar.gz", hash = "sha256:90488a3177513dbd7f881d29ce1846ea3fb15a654f449ec90bd01d03711e4bc3", size = 25554, upload-time = "2026-01-10T06:46:14.686Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/45/908b0514cb1c31ac04769a61fe868c6031e1bb86697b1ec9eb6d590936e1/fastscheduler-0.1.2-py3-none-any.whl", hash = "sha256:3c79dcde3c39bc7f32696fb7f667f5d6cc602c4102471014220cff3a32e6d77d", size = 26826, upload-time = "2026-01-10T06:46:15.604Z" }, +] + +[package.optional-dependencies] +fastapi = [ + { name = "fastapi", extra = ["standard"] }, +] + [[package]] name = "greenlet" version = "3.2.4" @@ -1304,7 +1318,7 @@ wheels = [ ] [[package]] -name = "wxcom-wnzs-adapter" +name = "wecom-wnzs-adapter" version = "0.1.0" source = { virtual = "." } dependencies = [ @@ -1312,6 +1326,7 @@ dependencies = [ { name = "casbin" }, { name = "fastapi", extra = ["standard"] }, { name = "fastapi-utils" }, + { name = "fastscheduler", extra = ["fastapi"] }, { name = "motor" }, { name = "pickledb" }, { name = "psycopg2-binary" }, @@ -1332,6 +1347,7 @@ requires-dist = [ { name = "casbin", specifier = ">=1.43.0" }, { name = "fastapi", extras = ["standard"], specifier = ">=0.116.1" }, { name = "fastapi-utils", specifier = ">=0.8.0" }, + { name = "fastscheduler", extras = ["fastapi"], specifier = ">=0.1.2" }, { name = "motor", specifier = ">=3.7.1" }, { name = "pickledb", specifier = ">=1.3.2" }, { name = "psycopg2-binary", specifier = ">=2.9.11" },