astropy SAMP Hub 启动与停止完全指南:三种方式详解与底层原理
科学计算科研数据分析【免费下载链接】astropyAstronomy and astrophysics core library项目地址https://gitcode.com/gh_mirrors/as/astropy点击查看免费下载导读SAMPSimple Application Messaging Protocol简单应用消息协议是 IVOA国际虚拟天文台联盟定义的进程间通信协议它通过一个本地运行的 Hub 进程让 TOPCAT、SAO DS9、Aladin 等桌面天文工具与 Python 代码互相收发消息。本文以 docs/samp/example_hub.rst 为骨架结合astropy.samp子包的源码实现系统讲解在 astropy 中启动与停止 SAMP Hub 的三种途径——复用已有应用自带的 Hub、使用samp_hub命令行工具、以及用SAMPHubServer类编程式启动含全部命令行参数与构造参数的表格式解析并深入说明锁文件、超时线程、Web Profile 等底层机制帮助你根据实际场景选择正确方案。为什么需要先启动一个 SAMP Hubastropy.samp是 SAMP V1.3 协议的 Python 实现除 Standard Profile 外还支持 Web Profile。协议的基本工作方式是本地主机上必须有一个正在运行的 SAMP Hub 进程各客户端程序先连接到这个 Hub再通过 Hub 互相转发消息详见 docs/samp/index.rst。Hub 在整个会话中的角色类似于消息中枢客户端通过它完成注册register、声明元数据declare_metadata、订阅消息类型declare_subscriptions、发送通知notify与同步调用call等。在大多数 SAMP 会话中同时只会有一个 Hub 在运行。值得留意的是从 astropy 8.0 版本起astropy.samp已被标记为弃用官方建议迁移到pyvo.samp但当前仓库中的实现依然完整可用本文所述内容均基于仓库现状弃用警告见 astropy/samp/init.py。启动 SAMP Hub 一共有三种方式按适用场景从易到难逐一说明。方式一使用现有应用自带的 Hub如果你只是想在日常桌面工具之间互传数据最简单的做法是直接启动一个自带 Hub 的 SAMP 应用例如TOPCAT表格数据探索工具SAO DS9图像显示与星表叠加工具Aladin Desktop图像与星表可视化工具TOPCAT 和 Aladin 在找不到已运行 Hub 时会自动拉起一个 Hub这一点在 docs/samp/example_table_image.rst 中有明确说明因此先启动这类应用、再运行你的 Python 客户端即可无需额外操心 Hub 的启动与停止。这种方式的优点是完全不用接触 Hub 进程管理Hub 的生命周期随宿主应用走关闭应用即停止 Hub。缺点是你必须在桌面会话中保持该应用处于运行状态且 Hub 的监听地址、端口等参数由该应用决定不由你控制。方式二使用samp_hub命令行工具astropy自带一个独立的命令行程序samp_hub可以在自己的进程里运行一个常驻 Hub。它是三种方式中最常用、也最接近“开箱即用”的途径。基本用法直接运行即可启动一个 Hub$ samp_hub查看全部可用选项$ samp_hub -h停止服务在前台终端中按下Control-C。samp_hub的主函数位于 astropy/samp/hub_script.py它使用argparse解析命令行参数将解析结果透传给SAMPHubServer构造器后调用hub.start(False)以非阻塞方式启动随后进入轮询循环当 Hub 仍在运行hub.is_running为真时以 0.01 秒间隔循环检查捕获KeyboardInterrupt时调用hub.stop()优雅停机捕获OSError时打印 I/O 错误并以状态码 1 退出。全部命令行选项详解以下选项均直接来自 hub_script.py 中的argparse定义按功能分组列出。基础连接选项选项参数说明-k,--secretCODE自定义 secret 码写入 lockfile不指定时由uuid.uuid1()自动生成-d,--addrADDR监听地址或 IP默认为127.0.0.1无网络时或本机主机名有网络时-p,--portPORT监听端口号默认为 0即由操作系统挑选空闲端口-f,--lockfileFILE自定义 lockfile 文件路径-w,--no-web-profile—以禁用 Web Profile 的方式运行 Hub默认启用 Web Profile-P,--pool-sizeSIZE与客户端通信的 socket 连接池大小默认 20超时选项组Timeout group选项参数说明-t,--timeoutSECONDSHub 不活动超时秒超过该时长无任何活动则 Hub 自动关闭默认 0即永不过期-c,--client-timeoutSECONDS客户端不活动超时秒超过该时长无活动的客户端将被 Hub 强制注销并收到samp.hub.disconnect类型通知默认 0即客户端永不失效日志选项组Logging options选项参数说明-L,--log-levelLEVELHub 日志级别可取值即logging模块的全部级别名CRITICAL、ERROR、WARNING、INFO、DEBUG 等默认INFO-O,--log-outputFILE将日志消息重定向到指定文件默认为空即输出到标准输出/标准错误高级选项组Advanced group选项参数说明-l,--labelLABEL为 Hub 分配一个人类可读名称写入 lockfile 的hub.label字段-m,--multi—以多实例模式启动 Hub使用随机命名的自定义 lockfile见下文锁文件机制其中-m/--multi属于非标准的 Hub 行为它允许多个 Hub 同时运行每个 Hub 的 lockfile 放在用户主目录的.samp-1目录下命名格式为samp-hub-PID-IDPID 为 Hub 进程 IDID 为内部整数。命令行工具的测试验证仓库中的测试 astropy/samp/tests/test_hub_script.py 演示了该工具的典型用法以-m多实例模式与-w禁用 Web Profile启动设置--log-level CRITICAL并让hub_script(timeout3)在 3 秒后自动停机最后断言日志级别确实被设置为 CRITICAL。这印证了samp_hub各选项与hub_script的对应关系-w对应web_profileFalse--log-level会直接作用于 astropy 全局日志器astropy.log。方式三编程式启动 Hub高级用法对于需要把 Hub 嵌入到自己程序里的场景例如嵌入 GUI 应用可以绕过命令行直接创建SAMPHubServer实例并调用其方法。在交互式 Python 提示符或脚本中均可 from astropy.samp import SAMPHubServer hub SAMPHubServer() hub.start()停止 Hub hub.stop()为什么文档不推荐普通用户使用这种方式原文档明确提示编程式启动一般不建议普通用户使用因为它无法正确处理 Web SAMP 客户端连接该方式主要留给需要在 GUI 中嵌入 Hub 的开发者。从源码看这一警告是有依据的当web_profileTrue默认且未提供web_profile_dialog时Hub 在 Web 客户端请求连接时依赖web_profile_text_dialog在终端弹出文本式确认对话框见 astropy/samp/hub.py 的_serve_forever循环与 astropy/samp/web_profile.py 中的web_profile_text_dialog实现。而hub.start()默认以非阻塞线程方式运行waitFalse在脱离交互式终端的环境里这种终端交互确认并不适用。若确需保留 Web Profile开发者应通过web_profile_dialog参数传入自定义 GUI 对话框实例详见进阶文档 docs/samp/advanced_embed_samp_hub.rst该文档还给出完整的 Tk 应用示例继承WebProfileDialog、定时调用handle_queue()、实现show_dialog()后调用consent()/reject()。SAMPHubServer 构造参数详解以下参数定义见 astropy/samp/hub.py 的__init__签名与samp_hub命令行选项一一对应参数默认值说明secretNonelockfile 使用的 secret 码不指定时用uuid.uuid1()生成addrNone监听地址或 IP无网络时默认127.0.0.1有网络时默认本机主机名源码中通过internet_on()判断并回退见 hub.pyport0XML-RPC 服务端口0 表示由操作系统分配空闲端口lockfileNone自定义 lockfile 名称timeout0Hub 不活动超时秒大于 0 时自动停机0 表示永不过期client_timeout0客户端不活动超时秒大于 0 时自动注销不活动客户端0 表示永不失效modesinglesingle使用标准.samplockfile桌面会话单实例multiple使用.samp-1目录下的samp-hub-UUID非标准 lockfilelabel人类可读的 Hub 名称写入 lockfile 的hub.label字段web_profileTrue是否启用 Web Profile 支持web_profile_dialogNone自定义确认对话框实例替换终端文本式确认实例会被注入queue_request与queue_result两个队列web_port21012Web SAMP 端口SAMP 规范要求 Web Profile 固定使用 21012除测试外不应改动pool_size20与客户端通信的 socket 连接池大小start() 与 stop() 的底层行为start(waitFalse)的完整流程hub.py若 Hub 已在运行或 lockfile 已存在抛出SAMPHubError若启用 Web Profile先启动 Web Profile HTTP 服务_start_web_profile_server启动 Standard Profile 的 XML-RPC 服务通过create_lock_file创建 lockfile写入 Hub 参数以 Hub 自身的身份注册为 SAMP 客户端并声明元数据_setup_hub_as_client使 Hub 也能收发消息启动后台线程_start_threads若waitTrue则阻塞并join主线程——这一模式正是samp_hub独立脚本使用的阻塞式运行方式waitFalse默认则在后台线程中运行适用于交互式 Python 会话与 GUI 嵌入。stop()hub.py会先向所有订阅samp.hub.event.shutdown的客户端广播停机通知_notify_shutdown将_is_running置为False校验 lockfile 中的 secret 后删除 lockfile最后以 10 秒超时等待所有线程退出并重置内部状态。仓库测试 astropy/samp/tests/test_hub.py 验证了 Hub 的“启动→停止→再次启动”全生命周期包括启用 Web Profile 的重复启动场景。超时机制的实现timeout与client_timeout分别由两个独立的守护线程负责hub.py_timeout_test_hub每 0.05 秒轮询一次当距上次活动时间超过timeout时发出SAMPWarning警告并调用stop()_timeout_test_client遍历各客户端最后活动时间对超过client_timeout的客户端发出警告、广播samp.hub.disconnect通知并强制注销。两个线程仅在对应超时值大于 0 时才会被创建见_start_threads因此默认配置下不存在额外的线程开销。lockfile 机制Hub 如何被发现Hub 的“存在性”通过 lockfile 对外宣告相关逻辑集中在 astropy/samp/lockfile_helpers.py。要点包括单实例模式modesingle下lockfile 位于用户主目录的.samp文件多实例模式modemultiple下位于.samp-1目录文件名为samp-hub-UUID若环境变量SAMP_HUB设置为std-lockurl:前缀的地址Hub 会改用该地址须为file:协议启动前会先清理失效 Hub 的垃圾 lockfileremove_garbage_lock_files并检查是否已有 Hub 在运行——若检测到其他 Hub 正在运行则放弃启动lockfile 内容由SAMPHubServer.params属性生成hub.py包含samp.secret、samp.hub.xmlrpc.url、samp.profile.version、hub.id、hub.label等键。客户端正是通过读取这些键来连接 Hub。相关配置项astropy.samp在 astropy/samp/init.py 中定义了两个配置项use_internet默认True是否允许astropy.samp使用网络n_retries默认10通信失败时的重试次数。这些配置会影响 Hub 在初始化时对监听地址的选择addr依赖internet_on()以及消息投递的可靠性。三种方式的对比与选型建议方式适用场景优点注意事项使用已有应用自带 Hub日常桌面工具互操作零配置、生命周期随应用需保持应用运行参数不可控samp_hub命令行独立常驻 Hub、脚本化工作流参数完整、进程隔离、Ctrl-C 即停需要单独管理进程SAMPHubServer编程式嵌入 GUI、深度集成可在代码内控制全部行为默认 Web Profile 交互不便普通用户不建议选型建议仅需在 TOPCAT、DS9、Aladin 之间互传数据时用方式一需要稳定、可复现的 Hub 环境时用方式二samp_hub例如 docs/samp/example_table_image.rst 中发送表格与图像前先执行$ samp_hub的典型流程只有当你确实要把 Hub 嵌入自己的应用程序如 GUI时才使用方式三并务必阅读进阶文档 docs/samp/advanced_embed_samp_hub.rst 处理 Web Profile 的连接确认对话框。进一步阅读docs/samp/example_hub.rst本文的原始骨架文档docs/samp/advanced_embed_samp_hub.rst在 GUI 中嵌入 Hub 的完整示例Tk WebProfileDialogdocs/samp/example_table_image.rst启动 Hub 后收发表格table.load.votable与图像image.load.fits的实战流程docs/samp/example_clients.rstSAMPClient与SAMPIntegratedClient的客户端实现细节astropy/samp/hub_script.py 与 astropy/samp/hub.pysamp_hub与SAMPHubServer的源码实现astropy/samp/tests/test_hub_script.py 与 astropy/samp/tests/test_hub.py对应的自动化测试用例。赞分享科学计算科研数据分析【免费下载链接】astropyAstronomy and astrophysics core library项目地址https://gitcode.com/gh_mirrors/as/astropy点击查看免费下载相关推荐Sapling 的 Rebase 完全指南用 sl rebase 移动提交的三种方式与底层原理Sapling 的 Rebase 完全指南用 sl rebase 移动提交的三种方式与底层原理 Sapling sl 中所谓的 rebase 本质上是开发工具CLI后端TaskingAI 记录Record创建完全指南text / web / file 三种方式与底层分块原理TaskingAI 记录Record创建完全指南text / web / file 三种方式与底层分块原理 本指南基于 TaskingAI 仓库中的官方人工智能大模型AI AgentRAG后端前端komorebi 边框样式详解system / rounded / square 三种模式与底层绘制原理komorebi 边框样式详解system / rounded / square 三种模式与底层绘制原理 导读 border style 是 komore桌面应用上一篇UIEffectTweener组件终极指南无需代码实现Unity UI动画特效的完整教程下一篇Redisson 在哨兵模式下获取分布式锁的常见错误及解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Knative Eventing 跨命名空间事件链接(Cross Namespace Event Links)特性全解析

Knative Eventing 跨命名空间事件链接(Cross Namespace Event Links)特性全解析

文档教程云原生 【免费下载链接】docs User documentation for Knative components. 项目地址: https://gitcode.com/gh_mirrors/docs1/docs 点击查看 免费下载 Knative Eventing 从 1.15 版本起引入了 cross-namespace-event-links 实验特性,允许 Trig…

2026/10/14 2:02:18 阅读更多 →
NPO光引擎替掉4.8万个光模块_买的是什么

NPO光引擎替掉4.8万个光模块_买的是什么

1. 引言:一次「不追求更快」的互联替换华为在 HUAWEI CONNECT 2026 上发布的 Ascend 960 SuperPoD,宣传语是「业界首个基于近封装光学(NPO)的超节点」。它给了一组很好算的数字:约 5500 个 Hi-ONE 光引擎,替…

2026/10/14 2:02:18 阅读更多 →
基于Vue3+SpringBoot的前后端分离电商系统设计与实现:以雪地装备销售平台为例

基于Vue3+SpringBoot的前后端分离电商系统设计与实现:以雪地装备销售平台为例

简介:一套基于Vue.js、SpringBoot与MySQL构建的雪地装备销售系统成品源码,面向计算机专业毕业设计或课程设计场景,可直接作为高评分项目提交。系统覆盖商品展示、搜索、购买、订单处理、支付接口及用户注册登录等完整电商流程,采用…

2026/10/14 2:01:18 阅读更多 →

最新新闻

Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

简介:这是一份面向Vue.js中高级开发者的数据透视表功能实现组件包,专为需要在Web应用中快速集成交互式聚合分析表格的前端工程师设计。资源提供两个核心Vue组件:支持拖放配置行列的完整数据透视表,以及轻量级仅聚合功能的PivotTab…

2026/10/14 2:45:28 阅读更多 →
CLRS 习题精解:B 树基本操作(B-TREE-INSERT、查找最值与前驱)与复杂度分析

CLRS 习题精解:B 树基本操作(B-TREE-INSERT、查找最值与前驱)与复杂度分析

文档教程教育 【免费下载链接】CLRS 📚 Solutions to Introduction to Algorithms Third Edition 项目地址: https://gitcode.com/gh_mirrors/clr/CLRS 点击查看 免费下载 本文以《算法导论(第三版)》第 18 章 18.2 节"B 树…

2026/10/14 2:45:28 阅读更多 →
加班后的回程路上,更适合先听完《妈妈,我失业了》

加班后的回程路上,更适合先听完《妈妈,我失业了》

傍晚下班路上,中学生,把耳机音量调到刚好盖住走廊声在便利店门口抽一口冷气再进门。歌词里「走不出了」写的就是这种说不清又不甘心的时刻——《妈妈,我失业了》接住的,正是这截情绪。词曲:小熊歌|演唱&…

2026/10/14 2:45:28 阅读更多 →
【Python实战】基于FastAPI的绿植养护管理系统 - 完整项目

【Python实战】基于FastAPI的绿植养护管理系统 - 完整项目

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐➕关注👀是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝关注👀欢迎…

2026/10/14 2:45:28 阅读更多 →
Cap 开源录屏上手:从依赖自检到发出第一条分享链接

Cap 开源录屏上手:从依赖自检到发出第一条分享链接

Cap 开源录屏上手:从依赖自检到发出第一条分享链接 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 给同事讲一个功能,你得先凑齐三人的日…

2026/10/14 2:45:28 阅读更多 →
单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →