Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/app/task/model/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class TaskScheduler(Base):

id: Mapped[id_key] = mapped_column(init=False)
name: Mapped[str] = mapped_column(String(50), unique=True, comment='任务名称')
task: Mapped[str] = mapped_column(String(255), comment='要运行的 Celery 任务(模块化字符串)')
task: Mapped[str] = mapped_column(String(255), comment='要运行的 Celery 任务')
args: Mapped[str | None] = mapped_column(JSON(), comment='任务可接收的位置参数')
kwargs: Mapped[str | None] = mapped_column(JSON(), comment='任务可接收的关键字参数')
queue: Mapped[str | None] = mapped_column(String(255), comment='CELERY_TASK_QUEUES 中定义的队列')
Expand Down
3 changes: 2 additions & 1 deletion backend/app/task/schema/result.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime
from typing import Any

from pydantic import ConfigDict, Field

Expand All @@ -12,7 +13,7 @@ class TaskResultSchemaBase(SchemaBase):

task_id: str = Field(description='任务 ID')
status: str = Field(description='执行状态')
result: bytes | None = Field(description='执行结果')
result: Any | None = Field(description='执行结果')
date_done: datetime | None = Field(description='结束时间')
traceback: str | None = Field(description='错误回溯')
name: str | None = Field(description='任务名称')
Expand Down
5 changes: 4 additions & 1 deletion backend/app/task/schema/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class TaskSchedulerSchemeBase(SchemaBase):
"""任务调度参数"""

name: str = Field(description='任务名称')
task: str = Field(description='要运行的 Celery 任务(模块化字符串)')
task: str = Field(description='要运行的 Celery 任务')
args: JsonValue | None = Field(default='[]', description='任务可接收的位置参数')
kwargs: JsonValue | None = Field(default='{}', description='任务可接收的关键字参数')
queue: str | None = Field(default=None, description='CELERY_TASK_QUEUES 中定义的队列')
Expand Down Expand Up @@ -48,5 +48,8 @@ class GetTaskSchedulerDetail(TaskSchedulerSchemeBase):
model_config = ConfigDict(from_attributes=True)

id: int = Field(description='任务调度 ID')
enabled: bool = Field(description='是否启用任务')
total_run_count: int = Field(description='已运行总次数')
last_run_time: datetime | None = Field(None, description='最后运行时间')
created_time: datetime = Field(description='创建时间')
updated_time: datetime | None = Field(None, description='更新时间')
16 changes: 8 additions & 8 deletions backend/app/task/tasks/beat.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@
from backend.app.task.utils.tzcrontab import TzAwareCrontab

LOCAL_BEAT_SCHEDULE = {
'exec_every_10_seconds': {
'task': 'task_demo_async',
'schedule': schedule(10),
'测试同步任务': {
'task': 'task_demo',
'schedule': schedule(5),
},
'exec_every_1_minute_of_hour': {
'测试异步任务': {
'task': 'task_demo_async',
'schedule': TzAwareCrontab('1'),
},
'exec_every_sunday': {
'task': 'delete_db_opera_log',
'清理操作日志': {
'task': 'app.task.tasks.db_log.tasks.delete_db_opera_log',
'schedule': TzAwareCrontab('0', '0', day_of_week='6'),
},
'exec_every_15_of_month': {
'task': 'delete_db_login_log',
'清理登录日志': {
'task': 'app.task.tasks.db_log.tasks.delete_db_login_log',
'schedule': TzAwareCrontab('0', '0', day_of_month='15'),
},
}
4 changes: 2 additions & 2 deletions backend/app/task/tasks/db_log/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
from backend.app.task.celery import celery_app


@celery_app.task(name='delete_db_opera_log')
@celery_app.task
async def delete_db_opera_log() -> int:
"""自动删除数据库操作日志"""
result = await opera_log_service.delete_all()
return result


@celery_app.task(name='delete_db_login_log')
@celery_app.task
async def delete_db_login_log() -> int:
"""自动删除数据库登录日志"""
result = await login_log_service.delete_all()
Expand Down
13 changes: 11 additions & 2 deletions backend/app/task/tasks/tasks.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from anyio import sleep
from time import sleep

from anyio import sleep as asleep

from backend.app.task.celery import celery_app


@celery_app.task(name='task_demo')
def task_demo() -> str:
"""示例任务,模拟耗时操作"""
sleep(20)
return 'test async'


@celery_app.task(name='task_demo_async')
async def task_demo_async() -> str:
"""异步示例任务,模拟耗时操作"""
await sleep(20)
await asleep(20)
return 'test async'