0

我正在尝试强化 Pyro 应用程序以进行生产。我在名称服务器上遇到了以下问题。

如果名称服务器关闭并快速重新打开,似乎有 50% 的机会会抛出以下错误:

socket.error: [Errno 98] Address already in use

这可以通过在窗口 ( pyro4-ns) 中运行名称服务器、按 CTRL+C 并再次运行来测试。有时我可以连续做 10 次没有问题,但接下来的 10 次会提高socket.error. 我发现当我遇到这个错误时,名称服务器释放套接字大约需要 30 秒。

supervisord用来控制火焰兵。我发现以下配置可以改善一些问题。值得注意的是,startretries=50NameServer 释放套接字的时间总是超过 30 秒左右。这样,如果进程由于某种原因终止,supervisord则可以启动它而不会失败。

[program:pyro-ns]
command=pyro4-ns
priority=1
startretries=50
autostart=true
autorestart=true

但是,如果在我的客户端执行过程中名称服务器死机,由于这个问题,重新连接到名称服务器需要 30 多秒。我在网络服务器中使用 Pyro 客户端来执行 REST 任务,所以这种延迟是不可接受的。

4

1 回答 1

0

感谢 Irman 的回答

如果 PYRO_SOCK_REUSE 环境设置为 True,则不会发生此错误,因为它在套接字上设置了 SO_REUSEADDR。

任何一个:

export PYRO_SOCK_REUSE=True
pyro4-ns

或者在 Supervisor 的配置中:

[program:pyro-ns]
environment = PYRO_SOCK_REUSE="True"
command=pyro4-ns
于 2015-12-02T02:23:28.907 回答