我正在尝试强化 Pyro 应用程序以进行生产。我在名称服务器上遇到了以下问题。
如果名称服务器关闭并快速重新打开,似乎有 50% 的机会会抛出以下错误:
socket.error: [Errno 98] Address already in use
这可以通过在窗口 ( pyro4-ns
) 中运行名称服务器、按 CTRL+C 并再次运行来测试。有时我可以连续做 10 次没有问题,但接下来的 10 次会提高socket.error
. 我发现当我遇到这个错误时,名称服务器释放套接字大约需要 30 秒。
我supervisord
用来控制火焰兵。我发现以下配置可以改善一些问题。值得注意的是,startretries=50
NameServer 释放套接字的时间总是超过 30 秒左右。这样,如果进程由于某种原因终止,supervisord
则可以启动它而不会失败。
[program:pyro-ns]
command=pyro4-ns
priority=1
startretries=50
autostart=true
autorestart=true
但是,如果在我的客户端执行过程中名称服务器死机,由于这个问题,重新连接到名称服务器需要 30 多秒。我在网络服务器中使用 Pyro 客户端来执行 REST 任务,所以这种延迟是不可接受的。