celestialflow 3.1.2__tar.gz → 3.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. {celestialflow-3.1.2 → celestialflow-3.1.4}/PKG-INFO +21 -63
  2. {celestialflow-3.1.2 → celestialflow-3.1.4}/README.md +19 -60
  3. {celestialflow-3.1.2 → celestialflow-3.1.4}/pyproject.toml +75 -71
  4. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow/__init__.py +9 -6
  5. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow/graph/__init__.py +2 -2
  6. celestialflow-3.1.2/src/celestialflow/graph/graph.py → celestialflow-3.1.4/src/celestialflow/graph/core_graph.py +161 -166
  7. celestialflow-3.1.2/src/celestialflow/graph/structure.py → celestialflow-3.1.4/src/celestialflow/graph/core_structure.py +28 -20
  8. celestialflow-3.1.2/src/celestialflow/graph/analysis.py → celestialflow-3.1.4/src/celestialflow/graph/util_analysis.py +8 -8
  9. celestialflow-3.1.2/src/celestialflow/graph/serialize.py → celestialflow-3.1.4/src/celestialflow/graph/util_serialize.py +2 -2
  10. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow/observability/__init__.py +1 -1
  11. celestialflow-3.1.2/src/celestialflow/observability/report.py → celestialflow-3.1.4/src/celestialflow/observability/core_report.py +78 -24
  12. celestialflow-3.1.4/src/celestialflow/persistence/__init__.py +13 -0
  13. celestialflow-3.1.4/src/celestialflow/persistence/core_base.py +61 -0
  14. celestialflow-3.1.4/src/celestialflow/persistence/core_fail.py +103 -0
  15. celestialflow-3.1.4/src/celestialflow/persistence/core_log.py +375 -0
  16. celestialflow-3.1.2/src/celestialflow/persistence/constant.py → celestialflow-3.1.4/src/celestialflow/persistence/util_constant.py +2 -1
  17. celestialflow-3.1.2/src/celestialflow/persistence/jsonl.py → celestialflow-3.1.4/src/celestialflow/persistence/util_jsonl.py +11 -58
  18. celestialflow-3.1.4/src/celestialflow/runtime/__init__.py +16 -0
  19. celestialflow-3.1.4/src/celestialflow/runtime/core_envelope.py +43 -0
  20. celestialflow-3.1.4/src/celestialflow/runtime/core_metrics.py +300 -0
  21. celestialflow-3.1.2/src/celestialflow/runtime/progress.py → celestialflow-3.1.4/src/celestialflow/runtime/core_progress.py +17 -9
  22. celestialflow-3.1.4/src/celestialflow/runtime/core_queue.py +329 -0
  23. celestialflow-3.1.4/src/celestialflow/runtime/core_runner.py +275 -0
  24. celestialflow-3.1.2/src/celestialflow/runtime/errors.py → celestialflow-3.1.4/src/celestialflow/runtime/util_errors.py +4 -3
  25. celestialflow-3.1.2/src/celestialflow/runtime/estimators.py → celestialflow-3.1.4/src/celestialflow/runtime/util_estimators.py +12 -11
  26. celestialflow-3.1.2/src/celestialflow/runtime/factories.py → celestialflow-3.1.4/src/celestialflow/runtime/util_factories.py +25 -14
  27. celestialflow-3.1.2/src/celestialflow/runtime/hash.py → celestialflow-3.1.4/src/celestialflow/runtime/util_hash.py +6 -6
  28. celestialflow-3.1.2/src/celestialflow/runtime/tools.py → celestialflow-3.1.4/src/celestialflow/runtime/util_queue.py +3 -3
  29. celestialflow-3.1.2/src/celestialflow/runtime/types.py → celestialflow-3.1.4/src/celestialflow/runtime/util_types.py +23 -37
  30. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow/stage/__init__.py +5 -5
  31. celestialflow-3.1.4/src/celestialflow/stage/core_executor.py +814 -0
  32. celestialflow-3.1.2/src/celestialflow/stage/stage.py → celestialflow-3.1.4/src/celestialflow/stage/core_stage.py +54 -53
  33. celestialflow-3.1.2/src/celestialflow/stage/nodes.py → celestialflow-3.1.4/src/celestialflow/stage/core_stages.py +72 -59
  34. celestialflow-3.1.4/src/celestialflow/utils/util_benchmark.py +103 -0
  35. celestialflow-3.1.4/src/celestialflow/utils/util_clone.py +117 -0
  36. celestialflow-3.1.2/src/celestialflow/utils/collections.py → celestialflow-3.1.4/src/celestialflow/utils/util_collections.py +2 -3
  37. celestialflow-3.1.2/src/celestialflow/utils/debug.py → celestialflow-3.1.4/src/celestialflow/utils/util_debug.py +1 -1
  38. celestialflow-3.1.2/src/celestialflow/utils/format.py → celestialflow-3.1.4/src/celestialflow/utils/util_format.py +3 -3
  39. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow/web/server.py +115 -48
  40. celestialflow-3.1.4/src/celestialflow/web/static/css/_colors.css +183 -0
  41. celestialflow-3.1.4/src/celestialflow/web/static/css/base.css +305 -0
  42. celestialflow-3.1.4/src/celestialflow/web/static/css/dashboard.css +368 -0
  43. celestialflow-3.1.4/src/celestialflow/web/static/css/errors.css +261 -0
  44. celestialflow-3.1.4/src/celestialflow/web/static/css/inject.css +638 -0
  45. celestialflow-3.1.4/src/celestialflow/web/static/favicon.ico +0 -0
  46. celestialflow-3.1.4/src/celestialflow/web/static/js/main.js +104 -0
  47. celestialflow-3.1.4/src/celestialflow/web/static/js/task_config.js +124 -0
  48. celestialflow-3.1.4/src/celestialflow/web/static/js/task_errors.js +131 -0
  49. celestialflow-3.1.4/src/celestialflow/web/static/js/task_history.js +123 -0
  50. celestialflow-3.1.4/src/celestialflow/web/static/js/task_injection.js +332 -0
  51. celestialflow-3.1.4/src/celestialflow/web/static/js/task_statuses.js +107 -0
  52. celestialflow-3.1.4/src/celestialflow/web/static/js/task_structure.js +127 -0
  53. celestialflow-3.1.4/src/celestialflow/web/static/js/task_summary.js +43 -0
  54. celestialflow-3.1.4/src/celestialflow/web/static/js/task_topology.js +53 -0
  55. celestialflow-3.1.4/src/celestialflow/web/static/js/utils.js +153 -0
  56. celestialflow-3.1.4/src/celestialflow/web/static/js/web_config.js +119 -0
  57. celestialflow-3.1.4/src/celestialflow/web/static/ts/globals.d.ts +6 -0
  58. celestialflow-3.1.4/src/celestialflow/web/static/ts/main.ts +125 -0
  59. celestialflow-3.1.4/src/celestialflow/web/static/ts/task_errors.ts +147 -0
  60. celestialflow-3.1.4/src/celestialflow/web/static/ts/task_history.ts +146 -0
  61. celestialflow-3.1.4/src/celestialflow/web/static/ts/task_injection.ts +379 -0
  62. celestialflow-3.1.4/src/celestialflow/web/static/ts/task_statuses.ts +149 -0
  63. celestialflow-3.1.4/src/celestialflow/web/static/ts/task_structure.ts +149 -0
  64. celestialflow-3.1.4/src/celestialflow/web/static/ts/task_summary.ts +54 -0
  65. celestialflow-3.1.4/src/celestialflow/web/static/ts/task_topology.ts +62 -0
  66. celestialflow-3.1.4/src/celestialflow/web/static/ts/utils.ts +169 -0
  67. celestialflow-3.1.4/src/celestialflow/web/static/ts/web_config.ts +144 -0
  68. celestialflow-3.1.4/src/celestialflow/web/templates/index.html +390 -0
  69. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow.egg-info/PKG-INFO +21 -63
  70. celestialflow-3.1.4/src/celestialflow.egg-info/SOURCES.txt +77 -0
  71. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow.egg-info/requires.txt +1 -2
  72. celestialflow-3.1.4/tests/test_executor.py +103 -0
  73. celestialflow-3.1.2/tests/test_nodes.py → celestialflow-3.1.4/tests/test_stages.py +26 -18
  74. celestialflow-3.1.2/src/celestialflow/persistence/__init__.py +0 -10
  75. celestialflow-3.1.2/src/celestialflow/persistence/fail.py +0 -117
  76. celestialflow-3.1.2/src/celestialflow/persistence/log.py +0 -326
  77. celestialflow-3.1.2/src/celestialflow/runtime/__init__.py +0 -11
  78. celestialflow-3.1.2/src/celestialflow/runtime/metrics.py +0 -158
  79. celestialflow-3.1.2/src/celestialflow/runtime/queue.py +0 -313
  80. celestialflow-3.1.2/src/celestialflow/stage/executor.py +0 -1103
  81. celestialflow-3.1.2/src/celestialflow.egg-info/SOURCES.txt +0 -44
  82. celestialflow-3.1.2/tests/test_executor.py +0 -121
  83. celestialflow-3.1.2/tests/test_graph.py +0 -219
  84. {celestialflow-3.1.2 → celestialflow-3.1.4}/setup.cfg +0 -0
  85. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow/utils/__init__.py +0 -0
  86. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow.egg-info/dependency_links.txt +0 -0
  87. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow.egg-info/entry_points.txt +0 -0
  88. {celestialflow-3.1.2 → celestialflow-3.1.4}/src/celestialflow.egg-info/top_level.txt +0 -0
  89. {celestialflow-3.1.2 → celestialflow-3.1.4}/tests/test_structure.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: celestialflow
3
- Version: 3.1.2
3
+ Version: 3.1.4
4
4
  Summary: A flexible GRAPH-based task orchestration framework.
5
5
  Author-email: Mr-xiaotian <mingxiaomingtian@gmail.com>
6
6
  License: MIT
@@ -15,14 +15,13 @@ Classifier: Topic :: Software Development :: Libraries
15
15
  Requires-Python: >=3.10
16
16
  Description-Content-Type: text/markdown
17
17
  Requires-Dist: tqdm
18
- Requires-Dist: loguru
19
18
  Requires-Dist: fastapi
20
19
  Requires-Dist: uvicorn
21
20
  Requires-Dist: requests
22
21
  Requires-Dist: networkx
23
22
  Requires-Dist: redis
24
23
  Requires-Dist: jinja2
25
- Requires-Dist: celestialtree
24
+ Requires-Dist: celestialtree>=0.1.2
26
25
 
27
26
  # CelestialFlow ——一个轻量级、可并行、基于图结构的 Python 任务调度框架
28
27
 
@@ -240,9 +239,8 @@ flowchart TD
240
239
 
241
240
  | 依赖包 | 说明 |
242
241
  | ----------------- | ---- |
243
- | **Python ≥ 3.8** | 运行环境,建议使用 3.10 及以上版本 |
242
+ | **Python ≥ 3.10** | 运行环境,建议使用 3.10 及以上版本 |
244
243
  | **tqdm** | 控制台进度条显示,用于任务执行可视化 |
245
- | **loguru** | 高性能日志系统,支持多进程安全输出 |
246
244
  | **fastapi** | Web 服务接口框架(用于任务可视化与远程控制) |
247
245
  | **uvicorn** | FastAPI 的高性能 ASGI 服务器 |
248
246
  | **requests** | HTTP 客户端库,用于任务状态上报与远程调用 |
@@ -256,69 +254,29 @@ flowchart TD
256
254
  <p align="center">
257
255
  <img src="https://raw.githubusercontent.com/Mr-xiaotian/CelestialFlow/main/img/file_structure.svg" alt="FileStructure" />
258
256
  <br/>
259
- <em>celestial-flow 3.1.1</em>
257
+ <em>celestial-flow 3.1.4</em>
260
258
  </p>
261
259
 
262
260
  (该视图由我的另一个项目[CelestialVault](https://github.com/Mr-xiaotian/CelestialVault)中inst_file.FileTree.print_tree()生成。转换为图片则借助[Carbon](https://carbon.now.sh)。)
263
261
 
264
- ## 更新日志(Change Log)
265
-
266
- - 2021: 建立一个支持多线程与单线程处理函数的类
267
- - 2023: 在GPT4帮助下添加多进程与携程运行模式
268
- - 5/9/2024: 将原有的处理类抽象为节点, 添加TaskChain类, 可以线性连接多个节点, 并设定节点在Chain中的运行模式, 支持serial和process两种, 后者Chain所有节点同时运行
269
- - 12/12/2024-12/16/2024: 在原有链式结构基础上允许节点有复数下级节点, 实现Tree结构; 将原有TaskChain改名为TaskTree
270
- - 3/16/2025: 支持Web端任务完成情况可视化
271
- - 6/9/2025: 支持节点拥有复数上级节点, 脱离纯Tree结构, 为之后循环图做准备
272
- - 6/11/2025: 自[CelestialVault](https://github.com/Mr-xiaotian/CelestialVault)项目instances.inst_task迁出
273
- - 6/12/2025: 支持循环图, 下级节点可指向上级节点
274
- - 6/13/2025: 支持loop结构, 即节点可指向自己
275
- - 6/14/2025: 支持forest结构, 即可有多个根节点
276
- - 6/16/2025: 多轮评测后, 当前框架已支持完整有向图结构, 将TaskTree改名为TaskGraph
277
- - 3.0.1: 上线Pypi, 可喜可贺
278
- - 3.0.4: 新增一个抽象结构TaskQueue, 用于表示节点的所有"入边"与"出边"; 恢复未消费任务的保存功能
279
- - 3.0.5: 删除原有的TaskRedisTransfer节点, 并增添三种新的redis交互节点TaskRedisSink TaskRedisSource TaskRedisAck, 用于跨语言 跨进程 跨设备处理任务; 并在Web页面添加展示拓扑信息的卡片
280
- - 3.0.6: 添加对[CelestialTree](https://github.com/Mr-xiaotian/CelestialTree)系统的支持, 现在可以追踪单个任务的流向
281
- - 3.0.7: 将TaskStage从TaskExecutor中单独抽出来作为一个子类; 增加新节点TaskRouter, 可以将传入的任务选择的传给不同的下游节点, 而不是进行广播
282
- - 3.0.8: 在ctree逻辑上将"任务重试"事件后的"任务成功/失败/重试"事件视为因果关系, 而非之前的并行关系; 重构错误搜集部分逻辑; 修复大量3.0.6与3.07版本引入的bug; 优化部分log表现
283
- - 3.0.9:
284
- - 更新前端mermaid显示中部分节点图标;
285
- - 对ctree_client进行匹配CelestialTree的大量修改;
286
- - 将ctree_client移出为单独的project;
287
- - 在前端中添加error_id的显示, 为之后显示provenance_tree做准备;
288
- - 增加大量warning与error, 用于提醒不规范设置;
289
- - 优化前后端中错误数据的传输方式, 在大量错误数据时减少内存消耗;
290
- - 优化LogSinker中log队列的准入机制;
291
- - 修改部分Bug;
292
- - 3.1.0:
293
- - 新增:
294
- - 优化web端仪表盘页面的"总体状态摘要"卡片, 新增"总重复任务"与"总剩余市场", 后者由节点间拓扑关系计算而成, 后续还需要优化;
295
- - 修复:
296
- - 3.0.9版本下当web端与celestialflow运行端不同时, error数据无法传递的问题;
297
- - 修复NullTaskReporter使用问题;
298
- - 3.1.1:
299
- - 新增:
300
- - [Important] CelestialTree中引入grpc, 这大大减少了emit操作的耗时;
301
- - [Important] 为TerminationSignal添加id, 并可以像task一样通过CelestialTree进行跟踪;
302
- - 优化task_graph与task_executor的log分级, 现在默认为"SUCCESS"级;
303
- - 将go_worker部分分离为单独project: [celestialflow-goworker]https://github.com/Mr-xiaotian/celestialflow-goworker
304
- - 在readme中使用svg图片来展示文件夹结构;
305
- - 优化全局剩余时间的计算;
306
- - 优化部分代码结构;
307
- - 修复:
308
- - 修复节点剩余时间在小于1s时显示0的问题(这很影响判断);
309
- - 在task_graph中使用"staged"模式时会报错的问题;
310
- - 3.1.2:
262
+ ## 版本日志(Version Log)
263
+ - 3.1.4:
311
264
  - feat:
312
- - [Important] 模仿已有Logger逻辑, 建立新的组合结构FailListener和FailSinker, 将原有绑定于TaskReporter的fail持久化在线程中实现;
313
- - 借此让TaskExecutor也可以进行fail持久化, 文件为fallback/{date_str}/{executor_errors}({time_str}).jsonl";
314
- - 重构整体项目结构, 现在更加清晰;
315
- - 补全docs/reference中全部文档, 并令其符合项目重构后结构
316
- - 引入uv进行环境管理;
317
- - 将executor中技术逻辑分离为runtime/metrics.py;
318
- - 整合TaskQueue中重复逻辑;
319
- - fix
320
- - 修复前端renderNodeList中参数设置错误;
321
- - 修复其他微小bug;
265
+ - 添加前端设置文件config.json, 包含主题(白天与黑夜), 刷新时间, 历史长度, 卡片种类, 仪表盘布局;
266
+ - 完善对termination_signal在ctree上的事件管理;
267
+ - 新添termination_*系日志, 同时优化部分原有日志;
268
+ - 在前端的错误数字上(包括单个stage的卡片与summary卡片)绑定跳转事件, 可以跳转到ErrorLog页面, 并显示对应的错误;
269
+ - 修复部分原有的文档错误, 并添加新的前端代码文档;
270
+ - refactor:
271
+ - fail_sinker.task_error中不必再传时间, 方法会自己补充;
272
+ - 将所有counter放入TaskMetrics管理, 断绝对TAskExecutor的调用依赖;
273
+ - 将run_*函数分离并移入TaskRunner类, 同时将pool管理也迁入;
274
+ - 将TaskQueue分离为更具体的TaskInQueue与TaskOutQueue, 同时TAskInQueue只接受一个MPQueue以避免原有的轮询逻辑, 减少CPU运算消耗;
275
+ - 前端代码换用ts;
276
+ - 重命名所有代码文件, 现在用core_与util_前缀来区分核心代码与辅助代码;
277
+ - 将history数据从status中移出, 使用单独的/api/*_history端口;
278
+ - fix:
279
+ - TaskRedisTransport节点在mermaid中没有展示为parallelogram;
322
280
 
323
281
  ## Star 历史趋势(Star History)
324
282
 
@@ -214,9 +214,8 @@ flowchart TD
214
214
 
215
215
  | 依赖包 | 说明 |
216
216
  | ----------------- | ---- |
217
- | **Python ≥ 3.8** | 运行环境,建议使用 3.10 及以上版本 |
217
+ | **Python ≥ 3.10** | 运行环境,建议使用 3.10 及以上版本 |
218
218
  | **tqdm** | 控制台进度条显示,用于任务执行可视化 |
219
- | **loguru** | 高性能日志系统,支持多进程安全输出 |
220
219
  | **fastapi** | Web 服务接口框架(用于任务可视化与远程控制) |
221
220
  | **uvicorn** | FastAPI 的高性能 ASGI 服务器 |
222
221
  | **requests** | HTTP 客户端库,用于任务状态上报与远程调用 |
@@ -230,69 +229,29 @@ flowchart TD
230
229
  <p align="center">
231
230
  <img src="https://raw.githubusercontent.com/Mr-xiaotian/CelestialFlow/main/img/file_structure.svg" alt="FileStructure" />
232
231
  <br/>
233
- <em>celestial-flow 3.1.1</em>
232
+ <em>celestial-flow 3.1.4</em>
234
233
  </p>
235
234
 
236
235
  (该视图由我的另一个项目[CelestialVault](https://github.com/Mr-xiaotian/CelestialVault)中inst_file.FileTree.print_tree()生成。转换为图片则借助[Carbon](https://carbon.now.sh)。)
237
236
 
238
- ## 更新日志(Change Log)
239
-
240
- - 2021: 建立一个支持多线程与单线程处理函数的类
241
- - 2023: 在GPT4帮助下添加多进程与携程运行模式
242
- - 5/9/2024: 将原有的处理类抽象为节点, 添加TaskChain类, 可以线性连接多个节点, 并设定节点在Chain中的运行模式, 支持serial和process两种, 后者Chain所有节点同时运行
243
- - 12/12/2024-12/16/2024: 在原有链式结构基础上允许节点有复数下级节点, 实现Tree结构; 将原有TaskChain改名为TaskTree
244
- - 3/16/2025: 支持Web端任务完成情况可视化
245
- - 6/9/2025: 支持节点拥有复数上级节点, 脱离纯Tree结构, 为之后循环图做准备
246
- - 6/11/2025: 自[CelestialVault](https://github.com/Mr-xiaotian/CelestialVault)项目instances.inst_task迁出
247
- - 6/12/2025: 支持循环图, 下级节点可指向上级节点
248
- - 6/13/2025: 支持loop结构, 即节点可指向自己
249
- - 6/14/2025: 支持forest结构, 即可有多个根节点
250
- - 6/16/2025: 多轮评测后, 当前框架已支持完整有向图结构, 将TaskTree改名为TaskGraph
251
- - 3.0.1: 上线Pypi, 可喜可贺
252
- - 3.0.4: 新增一个抽象结构TaskQueue, 用于表示节点的所有"入边"与"出边"; 恢复未消费任务的保存功能
253
- - 3.0.5: 删除原有的TaskRedisTransfer节点, 并增添三种新的redis交互节点TaskRedisSink TaskRedisSource TaskRedisAck, 用于跨语言 跨进程 跨设备处理任务; 并在Web页面添加展示拓扑信息的卡片
254
- - 3.0.6: 添加对[CelestialTree](https://github.com/Mr-xiaotian/CelestialTree)系统的支持, 现在可以追踪单个任务的流向
255
- - 3.0.7: 将TaskStage从TaskExecutor中单独抽出来作为一个子类; 增加新节点TaskRouter, 可以将传入的任务选择的传给不同的下游节点, 而不是进行广播
256
- - 3.0.8: 在ctree逻辑上将"任务重试"事件后的"任务成功/失败/重试"事件视为因果关系, 而非之前的并行关系; 重构错误搜集部分逻辑; 修复大量3.0.6与3.07版本引入的bug; 优化部分log表现
257
- - 3.0.9:
258
- - 更新前端mermaid显示中部分节点图标;
259
- - 对ctree_client进行匹配CelestialTree的大量修改;
260
- - 将ctree_client移出为单独的project;
261
- - 在前端中添加error_id的显示, 为之后显示provenance_tree做准备;
262
- - 增加大量warning与error, 用于提醒不规范设置;
263
- - 优化前后端中错误数据的传输方式, 在大量错误数据时减少内存消耗;
264
- - 优化LogSinker中log队列的准入机制;
265
- - 修改部分Bug;
266
- - 3.1.0:
267
- - 新增:
268
- - 优化web端仪表盘页面的"总体状态摘要"卡片, 新增"总重复任务"与"总剩余市场", 后者由节点间拓扑关系计算而成, 后续还需要优化;
269
- - 修复:
270
- - 3.0.9版本下当web端与celestialflow运行端不同时, error数据无法传递的问题;
271
- - 修复NullTaskReporter使用问题;
272
- - 3.1.1:
273
- - 新增:
274
- - [Important] CelestialTree中引入grpc, 这大大减少了emit操作的耗时;
275
- - [Important] 为TerminationSignal添加id, 并可以像task一样通过CelestialTree进行跟踪;
276
- - 优化task_graph与task_executor的log分级, 现在默认为"SUCCESS"级;
277
- - 将go_worker部分分离为单独project: [celestialflow-goworker]https://github.com/Mr-xiaotian/celestialflow-goworker
278
- - 在readme中使用svg图片来展示文件夹结构;
279
- - 优化全局剩余时间的计算;
280
- - 优化部分代码结构;
281
- - 修复:
282
- - 修复节点剩余时间在小于1s时显示0的问题(这很影响判断);
283
- - 在task_graph中使用"staged"模式时会报错的问题;
284
- - 3.1.2:
237
+ ## 版本日志(Version Log)
238
+ - 3.1.4:
285
239
  - feat:
286
- - [Important] 模仿已有Logger逻辑, 建立新的组合结构FailListener和FailSinker, 将原有绑定于TaskReporter的fail持久化在线程中实现;
287
- - 借此让TaskExecutor也可以进行fail持久化, 文件为fallback/{date_str}/{executor_errors}({time_str}).jsonl";
288
- - 重构整体项目结构, 现在更加清晰;
289
- - 补全docs/reference中全部文档, 并令其符合项目重构后结构
290
- - 引入uv进行环境管理;
291
- - 将executor中技术逻辑分离为runtime/metrics.py;
292
- - 整合TaskQueue中重复逻辑;
293
- - fix
294
- - 修复前端renderNodeList中参数设置错误;
295
- - 修复其他微小bug;
240
+ - 添加前端设置文件config.json, 包含主题(白天与黑夜), 刷新时间, 历史长度, 卡片种类, 仪表盘布局;
241
+ - 完善对termination_signal在ctree上的事件管理;
242
+ - 新添termination_*系日志, 同时优化部分原有日志;
243
+ - 在前端的错误数字上(包括单个stage的卡片与summary卡片)绑定跳转事件, 可以跳转到ErrorLog页面, 并显示对应的错误;
244
+ - 修复部分原有的文档错误, 并添加新的前端代码文档;
245
+ - refactor:
246
+ - fail_sinker.task_error中不必再传时间, 方法会自己补充;
247
+ - 将所有counter放入TaskMetrics管理, 断绝对TAskExecutor的调用依赖;
248
+ - 将run_*函数分离并移入TaskRunner类, 同时将pool管理也迁入;
249
+ - 将TaskQueue分离为更具体的TaskInQueue与TaskOutQueue, 同时TAskInQueue只接受一个MPQueue以避免原有的轮询逻辑, 减少CPU运算消耗;
250
+ - 前端代码换用ts;
251
+ - 重命名所有代码文件, 现在用core_与util_前缀来区分核心代码与辅助代码;
252
+ - 将history数据从status中移出, 使用单独的/api/*_history端口;
253
+ - fix:
254
+ - TaskRedisTransport节点在mermaid中没有展示为parallelogram;
296
255
 
297
256
  ## Star 历史趋势(Star History)
298
257
 
@@ -1,71 +1,75 @@
1
- [build-system]
2
- requires = ["setuptools>=61.0", "wheel"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "celestialflow"
7
- version = "3.1.2"
8
- description = "A flexible GRAPH-based task orchestration framework."
9
- readme = "README.md"
10
- license = { text = "MIT" }
11
- authors = [{ name = "Mr-xiaotian", email = "mingxiaomingtian@gmail.com" }]
12
- keywords = ["workflow", "task", "graph", "async", "CelestialFlow"]
13
- requires-python = ">=3.10"
14
-
15
- dependencies = [
16
- "tqdm",
17
- "loguru",
18
- "fastapi",
19
- "uvicorn",
20
- "requests",
21
- "networkx",
22
- "redis",
23
- "jinja2",
24
- "celestialtree",
25
- ]
26
-
27
- classifiers = [
28
- "Programming Language :: Python :: 3",
29
- "License :: OSI Approved :: MIT License",
30
- "Operating System :: OS Independent",
31
- "Framework :: FastAPI",
32
- "Topic :: Software Development :: Libraries",
33
- ]
34
-
35
- [project.urls]
36
- "Homepage" = "https://github.com/Mr-xiaotian/CelestialFlow"
37
- "Bug Tracker" = "https://github.com/Mr-xiaotian/CelestialFlow/issues"
38
-
39
- [project.scripts]
40
- celestialflow-web = "celestialflow.web.server:main_entry"
41
-
42
- [tool.setuptools]
43
- license-files = []
44
-
45
- [tool.setuptools.package-data]
46
- "celestialflow" = ["templates/*.html", "static/**/*"]
47
-
48
- [tool.pytest.ini_options]
49
- addopts = "-s"
50
- log_cli = true
51
- log_cli_level = "INFO"
52
- log_cli_format = "%(asctime)s [%(levelname)s] %(message)s"
53
- log_cli_date_format = "%Y-%m-%d %H:%M:%S"
54
-
55
- filterwarnings = [
56
- "ignore::DeprecationWarning",
57
- "ignore::pytest.PytestDeprecationWarning",
58
- ]
59
-
60
- asyncio_default_fixture_loop_scope = "function"
61
-
62
- [dependency-groups]
63
- dev = [
64
- "build>=1.2.2.post1",
65
- "twine>=6.1.0",
66
- "pytest>=8.3.4",
67
- "pytest-asyncio>=0.25.3",
68
- "httpx>=0.28.1",
69
- "python-dotenv>=1.2.2",
70
- "black>=26.1.0",
71
- ]
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "celestialflow"
7
+ version = "3.1.4"
8
+ description = "A flexible GRAPH-based task orchestration framework."
9
+ readme = "README.md"
10
+ license = { text = "MIT" }
11
+ authors = [{ name = "Mr-xiaotian", email = "mingxiaomingtian@gmail.com" }]
12
+ keywords = ["workflow", "task", "graph", "async", "CelestialFlow"]
13
+ requires-python = ">=3.10"
14
+
15
+ dependencies = [
16
+ "tqdm",
17
+ "fastapi",
18
+ "uvicorn",
19
+ "requests",
20
+ "networkx",
21
+ "redis",
22
+ "jinja2",
23
+ "celestialtree>=0.1.2",
24
+ ]
25
+
26
+ classifiers = [
27
+ "Programming Language :: Python :: 3",
28
+ "License :: OSI Approved :: MIT License",
29
+ "Operating System :: OS Independent",
30
+ "Framework :: FastAPI",
31
+ "Topic :: Software Development :: Libraries",
32
+ ]
33
+
34
+ [project.urls]
35
+ "Homepage" = "https://github.com/Mr-xiaotian/CelestialFlow"
36
+ "Bug Tracker" = "https://github.com/Mr-xiaotian/CelestialFlow/issues"
37
+
38
+ [project.scripts]
39
+ celestialflow-web = "celestialflow.web.server:main_entry"
40
+
41
+ [tool.setuptools]
42
+ license-files = []
43
+
44
+ [tool.setuptools.package-data]
45
+ celestialflow = [
46
+ "web/templates/*.html",
47
+ "web/templates/**/*.html",
48
+ "web/static/*",
49
+ "web/static/**/*",
50
+ ]
51
+
52
+ [tool.pytest.ini_options]
53
+ addopts = "-s"
54
+ log_cli = true
55
+ log_cli_level = "INFO"
56
+ log_cli_format = "%(asctime)s [%(levelname)s] %(message)s"
57
+ log_cli_date_format = "%Y-%m-%d %H:%M:%S"
58
+
59
+ filterwarnings = [
60
+ "ignore::DeprecationWarning",
61
+ "ignore::pytest.PytestDeprecationWarning",
62
+ ]
63
+
64
+ asyncio_default_fixture_loop_scope = "function"
65
+
66
+ [dependency-groups]
67
+ dev = [
68
+ "build>=1.2.2.post1",
69
+ "twine>=6.1.0",
70
+ "pytest>=8.3.4",
71
+ "pytest-asyncio>=0.25.3",
72
+ "httpx>=0.28.1",
73
+ "python-dotenv>=1.2.2",
74
+ "black>=26.1.0",
75
+ ]
@@ -3,7 +3,7 @@ from .stage import (
3
3
  TaskExecutor,
4
4
  TaskStage,
5
5
  TaskSplitter,
6
- TaskRedisSink,
6
+ TaskRedisTransport,
7
7
  TaskRedisSource,
8
8
  TaskRedisAck,
9
9
  TaskRouter,
@@ -17,14 +17,15 @@ from .graph import (
17
17
  TaskWheel,
18
18
  TaskGrid,
19
19
  )
20
- from .runtime.types import TerminationSignal
21
- from .runtime.hash import make_hashable
22
- from .utils.format import format_table
23
- from .persistence.jsonl import (
20
+ from .persistence.util_jsonl import (
24
21
  load_jsonl_logs,
25
22
  load_task_by_stage,
26
23
  load_task_by_error,
27
24
  )
25
+ from .runtime.util_types import TerminationSignal
26
+ from .runtime.util_hash import make_hashable
27
+ from .utils.util_format import format_table
28
+ from .utils.util_benchmark import benchmark_graph, benchmark_executor
28
29
  from .web.server import TaskWebServer
29
30
 
30
31
  __all__ = [
@@ -38,7 +39,7 @@ __all__ = [
38
39
  "TaskExecutor",
39
40
  "TaskStage",
40
41
  "TaskSplitter",
41
- "TaskRedisSink",
42
+ "TaskRedisTransport",
42
43
  "TaskRedisSource",
43
44
  "TaskRedisAck",
44
45
  "TaskRouter",
@@ -49,4 +50,6 @@ __all__ = [
49
50
  "load_task_by_error",
50
51
  "make_hashable",
51
52
  "format_table",
53
+ "benchmark_graph",
54
+ "benchmark_executor",
52
55
  ]
@@ -1,6 +1,6 @@
1
1
  # graph/__init__.py
2
- from .graph import TaskGraph
3
- from .structure import (
2
+ from .core_graph import TaskGraph
3
+ from .core_structure import (
4
4
  TaskChain,
5
5
  TaskLoop,
6
6
  TaskCross,