import time, randomdef with_backoff(fn, *args, max_tries=5, **kw): for i in range(max_tries): try: return fn(*args, **kw) except Exception as e: if i == max_tries - 1: raise wait = (2 ** i) + random.random() time.sleep(wait)
3. Handling Rate Limits
Example: 429 Handler
from pinecone.exceptions import PineconeApiExceptiontry: index.upsert(vectors=batch)except PineconeApiException as e: if e.status == 429: time.sleep(int(e.headers.get("Retry-After", "5"))) index.upsert(vectors=batch) else: raise
failed = []for b in batches: try: index.upsert(vectors=b) except Exception: failed.append(b)# retry failed laterfor b in failed: with_backoff(index.upsert, vectors=b)