nakashima723 / P2Pcrwlr

P2Pクローラ
https://twitter.com/nakashima723
Other
0 stars 0 forks source link

NTPサーバからレスポンスが帰ってこないことを考慮する必要がある #32

Closed tenax66 closed 1 year ago

tenax66 commented 1 year ago

NTPサーバから時刻を取得する際、たまにレスポンスが帰ってこないことがあります。 たとえば

import ntplib

ntp_server = 'ntp.nict.jp'

ntp_client = ntplib.NTPClient()
response = ntp_client.request(ntp_server)

のようなコードで、

ntplib.NTPException: No response received from ntp.nict.jp.

というエラーになります。

NTPサーバは外部の機関が立てているものなので、レスポンスが帰ってこないことはプログラム側で考慮すべきで、適切なエラーハンドリングをする必要があります。 (時刻がNTPサーバから取得できなかった場合は、但し書きをつけてローカルマシンの時刻を返すなど。)

追伸: 今回のように機能の修正が必要になったとき、対象の処理がコピーされてあちこちにあるとそれらすべてを修正する必要が出てきて、手間だったり漏れが発生したりします。そのため、コードはなるべくDRYに書くように心がけたいです。

nakashima723 commented 1 year ago

了解です。

時刻情報は証拠のキモなので、方針としてはNTPサーバーAから取得できなかった場合 →別のNTPサーバーBからも取得してみる →ダメだったらNTPサーバーCから取得してみる →それもダメだったらローカルマシンの時刻を返す といった実装にしたいところです。

nakashima723 commented 1 year ago

utils.time で、5種類のサーバーを順番に試す形にして実装しました。 一応、全部からエラーが返ってきたときの処理も実装する必要があると思いますが未着手です。datetimeオブジェクトを返さないと後の処理が面倒になるので、1970年1月1日午前0時0分0秒を返すようにしておくのがいいかもしれません。

tenax66 commented 1 year ago

ありがとうございます! すべてから例外が返ってきた場合の処理は、わたしの方でも考えておきます。

tenax66 commented 1 year ago

こちらは #35 で解決したので、closeします。