Skip to main content

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),并可通过 BPMN businessRuleTask 集成进流程。
  • 持久化: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)

最小可运行示例(拷贝即跑,无需任何本地文件;examples/loan-approval.bpmn 为本示例的完整版):

from camunda.parser import parse_bpmn_xml
from camunda.engine import ProcessEngine

xml = """<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:camunda="http://camunda.org/schema/1.0/bpmn"
                  id="d1" targetNamespace="http://example.com/loan">
  <bpmn:process id="loan-approval" name="贷款审批流程" isExecutable="true">
    <bpmn:startEvent id="start" name="提交申请"/>
    <bpmn:serviceTask id="check-credit" camunda:delegateExpression="${checkCredit}"/>
    <bpmn:exclusiveGateway id="amount-gateway" default="flow-auto-pass"/>
    <bpmn:userTask id="manual-review" name="人工审批"/>
    <bpmn:exclusiveGateway id="decision-gateway" default="flow-reject"/>
    <bpmn:endEvent id="end-approved" name="已批准"/>
    <bpmn:endEvent id="end-rejected" name="已拒绝"/>
    <bpmn:sequenceFlow id="flow-start" sourceRef="start" targetRef="check-credit"/>
    <bpmn:sequenceFlow id="flow-check" sourceRef="check-credit" targetRef="amount-gateway"/>
    <bpmn:sequenceFlow id="flow-manual" sourceRef="amount-gateway" targetRef="manual-review">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${amount &gt;= 10000}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="flow-auto-pass" sourceRef="amount-gateway" targetRef="end-approved"/>
    <bpmn:sequenceFlow id="flow-review" sourceRef="manual-review" targetRef="decision-gateway"/>
    <bpmn:sequenceFlow id="flow-approve" sourceRef="decision-gateway" targetRef="end-approved">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${approved == true}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="flow-reject" sourceRef="decision-gateway" targetRef="end-rejected"/>
  </bpmn:process>
</bpmn:definitions>"""

engine = ProcessEngine()
engine.register_delegate("checkCredit", lambda v: v.update(credit_ok=True))  # serviceTask 实现
engine.deploy(parse_bpmn_xml(xml))

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})                               # -> COMPLETED

启动 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/

文档与示例存放在 GitHub 仓库(PyPI 页面不内嵌),点击上方链接或在仓库根目录查看。

示例

仓库自带可直接 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.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for camunda-python 0.1.2
File Size Uploaded
camunda_python-0.1.2.tar.gz 105.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for camunda-python 0.1.2
File Interpreter ABI Platform
camunda_python-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 226.7 kB

Release files / camunda_python-0.1.2.tar.gz

Download URL camunda_python-0.1.2.tar.gz
Size 105.4 kB
Tags Source
SHA-256 checksum
How to use checksums
4808eee7834406a80460fd93fc714ace66d10bd23e7e9b8e512182b7b13efae6
BLAKE2b-256 checksum
How to use checksums
a0f86847a34747f9d7235dfee9ee1a0b3744466718dce41dd1efb3742649a748
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.2-py3-none-any.whl

Download URL camunda_python-0.1.2-py3-none-any.whl
Size 121.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f999d6ac7536d86d54e4210b5cbb0a67ec723ea6bdfda75328a9d4a2f4015e0a
BLAKE2b-256 checksum
How to use checksums
da5a9ca1ce972907e8d57a14fd33355d07c566bbd0023ee7c81ed3ab947a5a3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page