এটি কেবল সর্বোচ্চ_আপনিগুলিকেই পরিবর্তন করবে না এমন একটি ব্যাকঅফ কৌশলও সক্ষম করবে যা সমস্ত http: // ঠিকানার জন্য অনুরোধ করে পুনরায় চেষ্টা করার আগে (মোট 5 বার):
import requests
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
s = requests.Session()
retries = Retry(total=5,
backoff_factor=0.1,
status_forcelist=[ 500, 502, 503, 504 ])
s.mount('http://', HTTPAdapter(max_retries=retries))
s.get('http://httpstat.us/500')
এর জন্য ডকুমেন্টেশন অনুসারেRetry
: যদি ব্যাক অফ_ফ্যাক্টরটি 0.1 হয় , তবে ঘুম () আবার চেষ্টা করার মধ্যে [0.1 সে, 0.2 সে, 0.4 সে, ...] এর জন্য ঘুমাবে। স্থিতি কোডটি 500 , 502 , 503 বা 504 হয় তবে এটি পুনরায় চেষ্টা করতে বাধ্য করবে ।
Retry
আরও দানাদার নিয়ন্ত্রণের জন্য বিভিন্ন অন্যান্য বিকল্প :
- মোট - অনুমোদনের জন্য পুনরায় প্রচেষ্টার সংখ্যা।
- সংযুক্ত - পুনরায় চেষ্টা করার জন্য সংযোগ-সংক্রান্ত কত ত্রুটি।
- পড়ুন - কতবার পড়ার ত্রুটিগুলিতে পুনরায় চেষ্টা করতে হবে।
- পুনর্নির্দেশ - কতগুলি পুনঃনির্দেশ সম্পাদন করতে হবে।
- মেথড_হাইটালিস্ট - বড় আকারের এইচটিটিপি পদ্ধতি ক্রিয়াগুলির সেট করুন যা আমাদের আবার চেষ্টা করা উচিত।
- status_forcelist - এইচটিটিপি স্থিতি কোডগুলির একটি সেট যা আমাদের আবার চেষ্টা করার চেষ্টা করা উচিত।
- ব্যাকঅফ_ফ্যাক্টর - প্রচেষ্টাগুলির মধ্যে প্রয়োগ করার জন্য একটি ব্যাকঅফ ফ্যাক্টর।
- উত্সাহ_আন_প্রত্যক্ষ - পুনর্নির্দেশের সংখ্যাটি শেষ হয়ে গেলেও , একটি উত্থাপন করতে
MaxRetryError
, বা 3xx পরিসরে রেসপন্স কোড সহ প্রতিক্রিয়া ফিরিয়ে আনতে হবে কিনা ।
- raise_on_status - অনুরূপ অর্থ raise_on_redirect : কিনা আমরা একটি ব্যতিক্রম বাড়াতে হবে, অথবা একটি প্রতিক্রিয়া পাঠাচ্ছে, স্থিতি পড়ে যদি status_forcelist পরিসীমা এবং চেষ্টার ক্লান্ত করা হয়েছে।
বিশেষ দ্রষ্টব্য : raise_on_status অপেক্ষাকৃত নতুন, এবং এখনো urllib3 বা অনুরোধের মুক্তি সেটিকে করেছে। Raise_on_status শব্দ যুক্তি পাইথন সংস্করণ 3.6 মধ্যে সর্বাধিক মান গ্রন্থাগার সেটিকে করেছেন বলে মনে হচ্ছে।
নির্দিষ্ট এইচটিটিপি স্থিতি কোডগুলিতে পুনরায় চেষ্টা করার জন্য, স্থিতি_পরেসিলিস্ট ব্যবহার করুন । উদাহরণস্বরূপ, status_forcelist = [503] স্থিতি কোড 503 এ পুনরায় চেষ্টা করবে (পরিষেবাটি উপলভ্য নয়)।
ডিফল্টরূপে, পুনরায় চেষ্টা করুন কেবলমাত্র এই শর্তগুলির জন্য:
- পুল থেকে সংযোগ পেতে পারেনি।
TimeoutError
HTTPException
উত্থাপিত ( http.client থেকে ) পাইথন 3-তে অন্য httplib )। এটি URL- এ বা প্রোটোকলের মতো সঠিকভাবে গঠিত না হওয়ায় এটি নিম্ন-স্তরের HTTP ব্যতিক্রম বলে মনে হচ্ছে।
SocketError
ProtocolError
লক্ষ্য করুন যে এগুলি সমস্ত ব্যতিক্রম যা নিয়মিত এইচটিটিপি প্রতিক্রিয়া প্রাপ্ত হতে বাধা দেয়। যদি কোনও নিয়মিত প্রতিক্রিয়া উত্পন্ন হয়, তবে পুনরায় চেষ্টা করা হবে না। স্ট্যাটাস_ফোর্সালিস্ট ব্যবহার না করে , স্ট্যাটাস 500 এর সাথে একটি প্রতিক্রিয়াও আবার চেষ্টা করা হবে না।
এটিকে এমনভাবে আচরণ করতে যাতে কোনও রিমোট API বা ওয়েব সার্ভারের সাথে কাজ করার জন্য আরও স্বজ্ঞাত, আমি উপরের কোড স্নিপেট ব্যবহার করব, যা স্ট্যাটাস 500 , 502 , 503 এবং 504 এ পুনরায় চেষ্টা করে , যার সবগুলিই অসাধারণ নয় ওয়েব এবং (সম্ভবত) পুনরুদ্ধারযোগ্যকে যথেষ্ট বড় ব্যাক অফ সময় দেওয়া হয়েছে।
সম্পাদিত : urllib3Retry
থেকে সরাসরি ক্লাস আমদানি করুন ।