初始提交:chongming-task 任务控制库
单任务受控执行(15 态状态机 + 审计轨迹)、DAG 管道、Controller 门面。
执行器三个:线程(默认,含 async def 任务)、内联(同步 / 测试)、进程
(spawn 子进程:硬性停止、绕开 GIL、崩溃隔离)。
调度:并发额度 + 每桶限流 + 具名资源信号量(按标签)+ 优先级排队。
持久层:TaskStore 契约 + 内存 / SQLite / Postgres 实现,契约测试随包发布。
跨进程与多节点:写穿 / 读穿、指令通道与租约、owned_buckets 划界、reconcile。
CLI、12 个可直接运行的示例、docs/ 下 5 份文档。
门禁:ruff / ruff format / mypy(strict) 干净;
pytest 563 passed(44 skipped 是需要真实 Postgres 的那批);
带一台可连的 Postgres 时 607 passed。
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
"""内置存储实现的契约一致性测试。
|
||||
|
||||
两个实现(内存 / SQLite)跑**完全相同**的用例。这是"持久层可替换"这句话能成立的
|
||||
唯一证据——否则换后端就是在赌。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
from chongming_task.stores.memory import InMemoryTaskStore
|
||||
from chongming_task.stores.protocol import TaskStore
|
||||
from chongming_task.stores.sqlite import SqliteTaskStore
|
||||
from chongming_task.testing.store_contract import StoreContract
|
||||
|
||||
|
||||
class TestInMemoryStore(StoreContract):
|
||||
"""内存实现。"""
|
||||
|
||||
def make_store(self) -> TaskStore:
|
||||
return InMemoryTaskStore()
|
||||
|
||||
|
||||
class TestSqliteFileStore(StoreContract):
|
||||
"""SQLite 文件库——真实使用场景(跨进程、可重启)。"""
|
||||
|
||||
_tempdir: tempfile.TemporaryDirectory[str]
|
||||
|
||||
def make_store(self) -> TaskStore:
|
||||
self._tempdir = tempfile.TemporaryDirectory(prefix="chongming-store-")
|
||||
return SqliteTaskStore(Path(self._tempdir.name) / "tasks.db")
|
||||
|
||||
|
||||
class TestSqliteMemoryStore(StoreContract):
|
||||
"""SQLite 内存库——语义必须与文件库一致。"""
|
||||
|
||||
def make_store(self) -> TaskStore:
|
||||
return SqliteTaskStore(":memory:")
|
||||
Reference in New Issue
Block a user