最近、私はgunicorn
というコードを見ています。gunicorn WorkerTmp worker/workertmp.py
私は非常に混乱する問題があります。WorkerTmpの効果はworker/workertmp.py
にありますか?
gunicornバージョン:19.6.0
最近、私はgunicorn
というコードを見ています。gunicorn WorkerTmp worker/workertmp.py
私は非常に混乱する問題があります。WorkerTmpの効果はworker/workertmp.py
にありますか?
gunicornバージョン:19.6.0
WorkerTmpは、アービタと労働者の間の心臓の鼓動の方法です。すべてのワーカーは1つのtmp(WorkerTmpのインスタンス)に関連し、WorkerTmpには一時ファイル(_tmp)が含まれています。
私たちが見ることができるように、作業員(例えば、sync.SyncWorker
)として以下のコード、一時ファイルに関するメタデータ情報を修正するであろう、intervally WorkerTmp.notifyを呼び出します:アービタに戻ってきて
def notify(self):
try:
self.spinner = (self.spinner + 1) % 2
os.fchmod(self._tmp.fileno(), self.spinner)
except AttributeError:
# python < 2.6
self._tmp.truncate(0)
os.write(self._tmp.fileno(), b"X")
を、アービタは意志メインループでワーカーが接続を失っていないかどうかを確認してください(arbiter.py:197)。しかしどのように? arbiter.pyショーでライン477よう:
if time.time() - worker.tmp.last_update() <= self.timeout:
間隔が長く設定されたタイムアウトを超える場合、今と一時ファイルの最終更新時刻との間隔を確認し、我々は労働者が接続を失っていると思います。今、重要な点は、方法tmp.last_update
で、コードはすべてを示しています
def last_update(self):
return os.fstat(self._tmp.fileno()).st_ctime
os.fchmod
は、ファイルのst_ctime
を変更します。 "stat"を使用して、ファイルの3つの時間属性をチェックすることができます。