Pyro - 防止 NameServer 引发 socket.error 地址已被使用
Pyro - Preventing NameServer from raising socket.error Address already in use
我正在尝试强化用于生产的 Pyro 应用程序。我 运行 遇到以下名称服务器问题。
如果名称服务器关闭并迅速重新打开,似乎有 50% 的几率会抛出以下错误:
socket.error: [Errno 98] Address already in use
这可以通过 运行 window (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 任务,因此这种延迟是不可接受的。
感谢 Irman answer。
如果 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
我正在尝试强化用于生产的 Pyro 应用程序。我 运行 遇到以下名称服务器问题。
如果名称服务器关闭并迅速重新打开,似乎有 50% 的几率会抛出以下错误:
socket.error: [Errno 98] Address already in use
这可以通过 运行 window (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 任务,因此这种延迟是不可接受的。
感谢 Irman answer。
如果 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