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 秒以上かかります。REST タスク用の Web サーバーで Pyro クライアントを使用しているため、この遅延は受け入れられません。

4

1 に答える 1

0

答えてくれたIrmanに感謝します。

PYRO_SOCK_REUSE 環境が True に設定されている場合、ソケットに SO_REUSEADDR が設定されるため、このエラーは発生しません。

また:

export PYRO_SOCK_REUSE=True
pyro4-ns

またはスーパーバイザーの設定で:

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