You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pynetdicom脚本在Windows任务计划程序中运行异常如何解决

问题成因
  • 核心原因是缺失SCP服务阻塞逻辑:Spyder为交互运行环境,脚本执行结束后进程不会自动终止,启动的SCP服务实例会持续存活监听端口。但脚本独立运行时,若启动SCP后未添加阻塞主线程的代码,主线程执行完后续逻辑会直接退出,SCP服务随之被销毁,无法监听到PACS发送的C-STORE请求,自然不会触发handle_store函数。
  • 防火墙端口权限限制:首次在Spyder中运行脚本时,你大概率同意了Windows防火墙的入站连接弹窗,仅放行了Spyder关联的Python进程的端口访问权限。定时任务触发的独立Python进程无对应防火墙规则,PACS的连接请求被拦截。
  • 定时任务权限配置错误:若定时任务使用SYSTEM默认用户运行,该用户的网络监听权限、本地目录写入权限都和你日常登录的用户不同,会导致SCP启动失败或无法写入下载的影像文件。
修复方案
  • 补充SCP阻塞等待逻辑:
    在脚本中新增接收完成判断逻辑,避免主线程提前退出,示例代码如下:
from threading import Event

# 全局事件,用于标记影像接收完成
receive_complete = Event()
# 提前存储查询得到的总影像数量
total_instance_count = 0
received_count = 0

def handle_store(event):
    global received_count
    # 原有存储逻辑不变
    # ...
    received_count += 1
    if received_count == total_instance_count:
        receive_complete.set()
    return 0x0000

# 原有查询逻辑执行完成后,给total_instance_count赋值
# ...

# 启动SCP后新增阻塞逻辑
scp.start()
# 最多等待300秒接收影像,可按需调整超时时间
receive_complete.wait(timeout=300)
scp.stop()
  • 配置固定端口防火墙规则:
    在Windows Defender防火墙中新增入站规则,放行SCP监听端口的TCP入站连接,不需要绑定特定进程,避免不同Python进程的权限差异。
  • 调整定时任务配置:
    1. 运行用户设置为你日常登录Windows的账户,不要使用默认SYSTEM用户
    2. 勾选「使用最高权限运行」,避免端口监听的权限不足问题
    3. 任务操作的「起始于」参数填写脚本所在的目录,「程序或脚本」填写对应Python解释器的完整路径,参数填写脚本的完整路径。
  • 新增本地日志:
    在脚本关键节点(SCP启动、查询完成、接收开始、接收完成)添加日志输出到本地文件,出现异常时可直接通过日志定位问题节点。

内容的提问来源于stack exchange,提问作者bullFrog51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:30:05