camunda-python
一个面向 Python 3 的开源 BPMN / DMN 流程引擎。
提供 BPMN 2.0 流程模型解析、流转执行、DMN 决策表求值、SQLAlchemy 持久化、多实例 作业执行与可选的 REST API。适合需要把工作流嵌入 Python 服务、又不想拉一整套 Java 生态的团队。
特性一览
- BPMN 2.0 流程建模:基于
lxml的自研解析器,支持用户任务 / 服务任务 / 排他与 并行网关 / 内嵌子流程 / 多实例 / 边界与中断 / 消息与信号事件。 - DMN 决策引擎:独立可用,支持六种
hitPolicy(UNIQUE/FIRST/ANY/PRIORITY/RULE ORDER/COLLECT[+SUM/MIN/MAX/COUNT])与 FEEL 表达式子集 (数值算术 / 比较 / 区间 / 列表 /not(...)/null),并可通过 BPMNbusinessRuleTask集成进流程。 - 持久化:SQLAlchemy 2.0,兼容 SQLite / PostgreSQL / MySQL。崩溃后
ProcessEngine.from_database()一行恢复。 - 作业执行器:Timer Start / Timer Catch /
asyncBefore / asyncAfter/ 失败重试;JobExecutor后台线程自动推进。 - 多节点抢锁:跨进程 / 多 JobExecutor 通过 DB CAS lease 保证同一作业不被重复执行, 长作业支持续约。
- REST API:FastAPI 兼容 Camunda 7
engine-rest常用端点(部署 / 流程定义 / 流程实例 / 任务 / 历史 / 决策),9 个列表端点支持firstResult+maxResults分页。
快速开始
pip install camunda-python # 核心(BPMN / DMN / 持久化 / JobExecutor)
pip install camunda-python[api] # 可选:REST API(fastapi + uvicorn)
最小可运行示例(5 行跑通一个贷款审批流程):
from pathlib import Path
from camunda.parser import parse_bpmn_xml
from camunda.engine import ProcessEngine
xml = Path("examples/loan-approval.bpmn").read_text()
engine = ProcessEngine()
engine.deploy(parse_bpmn_xml(xml, source_name="loan-approval.bpmn"))
pi = engine.start_process_instance_by_key("loan-approval", {"amount": 20000})
task = engine.create_task_query(process_instance_id=pi.id)[0]
engine.complete_task(task.id, {"approved": True})
启动 REST 服务:
uvicorn camunda.api.app:create_app --factory --port 8080
# 交互式 API 文档:http://127.0.0.1:8080/docs
文档导航
| 想做什么 | 看哪里 |
|---|---|
| 第一次接触,从「5 分钟 hello world」走到「生产部署」 | docs/USER_GUIDE.md |
| 看引擎设计 / 模块划分 / 与 Camunda 7 的差异 | docs/ARCHITECTURE.md |
| 看每个示例跑什么场景 | examples/ |
示例
仓库自带可直接 python examples/xxx.py 运行的可执行示例:
| 示例 | 演示的引擎能力 |
|---|---|
run_demo.py |
排他网关 + 用户任务 + 服务任务(贷款审批) |
run_timer_demo.py |
Timer Start / Timer Catch / asyncBefore(真实时钟) |
run_boundary_demo.py |
Timer 边界事件中断 + asyncAfter(审批超时降级) |
run_subprocess_demo.py |
内嵌子流程 + 子流程级边界 timer(订单履约 / 退款) |
run_ni_demo.py |
非中断式边界(cancelActivity=false + 并发收束) |
run_mi_demo.py |
多实例三宿主(userTask / serviceTask / subProcess) |
run_msg_sig_demo.py |
消息 1:1 关联 / 信号广播 / 订阅恢复 |
run_dmn_demo.py |
DMN 直接求值 / businessRuleTask 集成 / 决策驱动网关 |
run_api_demo.py |
真实起 uvicorn,部署 / 启动 / 任务 / 历史 / 决策端到端 |
run_lock_demo.py |
双 JobExecutor 共享 Store,验证 CAS lease 抢锁 |
测试与开发
git clone https://github.com/movingheart/camunda-python.git
cd camunda-python
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,api]"
pytest # 跑测试套件
pytest -k test_dmn # 只跑某个子模块
pytest --cov=camunda # 带覆盖率
CI 在 GitHub Actions 上跑 Python 3.12 / 3.13,每次 push 触发。
与 Camunda 7 的差异
设计目标是语义对齐——核心流程元素、状态机、持久化表结构与 Camunda 7 保持一致, 方便已有 Camunda 7 经验的人快速理解。但以下几点有意取舍:
- 不做:Cockpit / Tasklist Web 控制台、身份与权限、外部任务(external task)。
- 轻量差异:FEEL 仅支持子集(无函数调用 / 日期时间 / 路径表达式);
DMN 仅支持
decisionTable形态;DMN 部署不落库(崩溃恢复后需重新deploy_dmn)。 - 多进程抢锁:用应用层 CAS(
UPDATE ... WHERE LOCK_EXP_TIME_ < now)替代SELECT FOR UPDATE,跨 SQLite / PostgreSQL / MySQL 三个方言一致。 - 持久化策略:命令边界 delete + insert 全量重写(与 Camunda 7 逐行 update 不同), 对中小流程足够快,恢复语义更直白。
完整差异表见 docs/ARCHITECTURE.md §设计取舍。
许可
Apache-2.0。详见 LICENSE。
变更记录见 CHANGELOG.md。
Metadata
Release files for camunda-python 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| camunda_python-0.1.1.tar.gz | 103.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| camunda_python-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 224.3 kB
Release files / camunda_python-0.1.1.tar.gz
| Download URL | camunda_python-0.1.1.tar.gz |
|---|---|
| Size | 103.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
37747759f462220d07b583d86fa4fc3bd41a79fc3f4c0407239be5a75bea926d
|
|
BLAKE2b-256 checksum How to use checksums |
6110b91edac73a606783768f12d54c8557d5ece2557fd036c5896510a9ab19e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.10
|
Release files / camunda_python-0.1.1-py3-none-any.whl
| Download URL | camunda_python-0.1.1-py3-none-any.whl |
|---|---|
| Size | 120.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bf5f16b0e281c5fe513d07c753ab72eaf0939835bb7748e097c5c39f794a14d7
|
|
BLAKE2b-256 checksum How to use checksums |
57758507386f039648fe4f854135b6e52fe99977ceb5e3fb34bcf09c4b1f9d7b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.10
|