全部文档
文档中心工作流常见问题与排查Python 脚本

Python 脚本

Python 日志出现 APIResponseErrorcode: 401UNAUTHORIZED。例如定时启动的流程调用 Python,Python 再访问平台组件时失败。

统一在被调用的 Python 脚本入口中处理,使用 DeepFOS Python 官方异常说明 中与实际 SDK 版本对应的配置。仅刷新浏览器登录状态,不能作为定时运行脚本的长期解决办法。

  1. 打开节点实际关联的 Python 元素,进入“元素设置”,找到“内网执行”,点击旁边的设置图标可查看并复制配置代码;同时确认执行入口及运行环境中的 deepfos SDK 版本。

  2. 若 SDK 大于等于 1.1.77,将以下配置放在入口最上方。

  3. 配置必须先于任何 DeepFOS 元素类、API 类的导入;若其他业务模块间接导入这些类,也要先配置,再导入业务模块。

  4. 保存 Python 元素,按当前环境的脚本发布方式使修改生效,再用原调用方式复测。

Python 元素设置中的内网执行入口与代码复制位置

上图说明配置入口。复制代码后需要粘贴到脚本入口最前面才会生效;截图中的 ServiceDiscovery 是较早版本的写法,具体代码请按下面的 SDK 版本说明选择。

Copy
from deepfos import OPTION

OPTION.discovery.enabled = True
OPTION.discovery.take_over = True

# 在以上配置之后,再导入所需的 DeepFOS 元素类、API 类及业务模块。

SDK 在 1.1.7 至 1.1.77 之前、或 低于 1.1.7 时,服务发现配置不同。请使用官方说明中对应版本的完整方案,不能只把旧版 Eureka 示例复制到所有环境。

该配置面向平台线上运行环境。若改后出现服务发现、服务地址或连接错误,请交由环境管理员核对服务注册和网络,不要把所有错误都继续当作登录过期处理。

本机运行时,按官方说明更新 debug 文件中的 para1 参数,并确认调试配置先于 DeepFOS 业务模块生效。不要把本地登录凭证写入共享文档或长期固定到线上脚本。

用同一个 Python 元素和原有流程调用方式验证:组件调用不再报 401;同步调用能返回节点定义的输出;异步调用还要到 Python 作业中确认实际执行结果。对有写入、发送通知等副作用的脚本,重试前先检查上次是否已部分完成。

现象:同一节点多次调用 Python,间隔较规律;或日志出现“同步调用python超时”“脚本执行超时,节点异常,请更改调用方式”。

  1. 对照流程实例 ID、节点和 Python 作业的开始时间。不同流程实例分别调用同一个 Python,不属于同一节点重试,应先检查重复发起或定时启动配置。

  2. 同一实例重复调用时,检查节点调用方式、实际耗时、作业错误及重试记录;同时确认流程是否配置了循环或再次进入该节点的路径。

  3. 同步调用耗时较长时,结合工作流和 Python 两侧日志检查调用超时、数据库事务中断及作业锁超时,不能仅凭“约每 5 分钟一次”确定原因。

耗时较长或不稳定的 Python,优先评估改为异步调用。后续步骤依赖脚本结果时,还要配置“异步调用 + 等待消息”,由脚本完成后发送消息并回传所需参数。只切换成异步,并不能保证多个脚本按完成顺序执行。 配置方法见 异步调用与消息配合的最佳实践

重试前先核对上次脚本的实际状态和业务写入结果。工作流停止等待,不代表 Python 已停止;对写入、扣减、通知等操作,应按业务主键避免重复处理。

当前实现中的同步等待窗口为“工作流作业锁时长减去 15 秒”。作业锁配置 JOB_EXECUTION_LOCK_TIME_IN_MILLIS 的默认值为 300000 毫秒,对应等待窗口约 4 分 45 秒。这是当前代码默认配置下的等待窗口,不是所有部署环境的固定超时,也不是脚本的强制停止时间。

实际中还可能更早触发数据库或服务调用超时。请由管理员核对部署版本和生效配置,不要直接把历史文档中的“5 分钟”当作统一结论。

异步调用成功表示脚本已被调起,不表示业务执行完成。需要等待结果的场景,应按 PY 脚本最佳实践 配置“异步调用 + 等待消息”。核对等待节点的消息、目标流程实例和回传参数。

回到顶部

咨询热线

400-821-9199