python - 如何构建能够在 Python 中进行热代码交换的 Twisted 服务器?

标签 python twisted on-the-fly

我开发了一套音频流服务器,都是用的Twisted,当然是Python的。它们可以工作,但是一个问题一直困扰着我,当我在运行的服务器中发现一些错误,或者我想向服务器添加一些东西时,我需要停止它们并启动。与 HTTP 服务器不同,可以随时重新启动它们,但音频流服务器则不行。一旦我重新启动我的流媒体服务器,这意味着我的用户将遇到断开连接的情况。

我确实尝试设置一个沙井(Twisted 服务器的 ssh 服务,您可以登录并在控制台中键入 Python 代码来执行某些操作),然后连接到控制台,即时重新加载 Python 模块。它有时会起作用,但很难控制。你永远不知道服务器中有多少旧类的实例,其中一些可能很难访问,类之间的关系会非常复杂。此外,它可能在某些情况下有效,但有时您确实需要重新启动服务器,例如,您正在使用 selector reactor 运行服务器,而您想使用 epoll reactor 运行它,那么您必须重新启动它。另一个例子,当内存使用率过高时,你也必须重新启动它们。

为了构建这样的系统,我的脑海中浮现出一个想法,我认为可以将这些连接和数据从一个进程移交给另一个进程。例如:

我们有一个名为 Broadcasting 的服务器,正在运行的实例在 rev.123 下,我们想用 rev.124 替换它。

Broadcasting rev.123 is running....
Startup Broadcasting rev.124 ....
Broadcasting rev.124 is stand by
Hand over connections from instance of rev.123 to instance of rev.124
Stop Broadcasting rev. 123 instance

这可能吗?我不知道套接字句柄的生命周期是否绑定(bind)到进程,我认为进程创建的套接字将在创建者进程被终止时关闭,但我不确定。如果可能的话,有没有关于设计这种热代码交换机制的指南或文章?有什么东西可以实现我想要的 Twisted 已经完成了吗?

谢谢。

最佳答案

关于python - 如何构建能够在 Python 中进行热代码交换的 Twisted 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864380/

相关文章:

python - 对整数 numpy 数组执行按位测试

python - 计算属于巨型组件的节点的比例(python,networkx)

scrapy - 为什么scrapyd会抛出: "' FeedExporter' object has no attribute 'slot' "exception?

authentication - 使用 Twisted 通过客户端证书身份验证保护 Websockets

actionscript-3 - ActionScript 3 - 动态编写函数

cakephp - 如何使用 Controller 操作方法动态添加帮助程序或组件

linux - 是否可以将 `script` 通过管道传输到例如 `xz` 以进行即时压缩而不是文件或设备?

python - Python 中的 dict() 问题,TypeError :'tuple' 对象不可调用

python - Pandas - 计算其他列中每种值类型的值频率

python - 关闭扭曲的服务器