पाठ 20 / 25

Checkpoints और Resume

हर step के बाद loop की स्थिति सहेजें ताकि रुका या crash हुआ run आगे बढ़ सके।

ऐसी स्थिति जो दोबारा लोड हो

लंबा run आख़िर किसी सीमा, deploy या crash से टकराएगा। हर सफल step के बाद messages, step गिनती और उपयोग हुआ budget सहेजें तो नया process उन्हें लोड करके आगे बढ़ सकता है, सिर्फ़ बचा हुआ ख़र्च करते हुए। जहाँ हो सके tool कर्मों को idempotent (दो बार चलाना सुरक्षित) बनाएँ, क्योंकि resume आख़िरी step दोहरा सकता है।

सहेजें और लोड करें

अस्थायी फ़ाइल में लिखकर rename करने से लिखते समय process मरने पर अधूरा checkpoint नहीं बचता।

import json, os

def save(path, state):
    tmp = path + ".tmp"
    with open(tmp, "w") as f:
        json.dump(state, f)
    os.replace(tmp, path)          # atomic on the same filesystem

def load(path):
    with open(path) as f:
        return json.load(f)

त्वरित जाँच: Resume संभव हो तो tool कर्मों को idempotent क्यों बनाएँ?

  • Resume आख़िरी step दोहरा सकता है
  • Idempotent tools तेज़ हैं
  • API इसे ज़रूरी करता है
  • यह सारे errors से बचाता है
Answer

Resume आख़िरी step दोहरा सकता है — आख़िरी step चला पर दर्ज नहीं हुआ तो दूसरी बार चलने से दोहरे प्रभाव नहीं होने चाहिए।