ক্রলারে যথেষ্ট সংখ্যক সমকালীন অনুরোধ কনফিগার করা আছে। তবুও এটি প্রক্সি পুলের কাছে আরেকটি ঠিকানা চাইলে থেমে যায়। আরও প্রক্সি যোগ করলে সেই থামা বদলায় না।

একটি সাধারণ মিডলওয়্যার প্যাটার্ন requests.get(pool_url) কল process_request()-এর ভিতরে করে। এটি একটি সিঙ্ক্রোনাস নেটওয়ার্ক অপারেশন, এমন পথে যেখানে Scrapy-র অ্যাসিঙ্ক্রোনাস ইঞ্জিনের সঙ্গে সহযোগিতা করার কথা। কলটি অপেক্ষা করার সময় একই ইভেন্ট-লুপ থ্রেডে অসংশ্লিষ্ট কাজ আটকে রাখতে পারে।

কাজটিতে দুটি অনুরোধ আছে

একটি অনুরোধ পুল সেবা থেকে একটি এন্ডপয়েন্ট পায়। অন্যটি সেই এন্ডপয়েন্ট ব্যবহার করে গন্তব্যের সঙ্গে যোগাযোগ করে। দুটিকে আলাদাভাবে মাপুন ও প্রতিবেদন করুন। একটি ধীর পুল API অ্যাপ্লিকেশন সংযুক্ত হওয়ার আগেই প্রতিটি নির্বাচিত প্রক্সিকে ধীর দেখাতে পারে।

সংশ্লিষ্ট Scrapy সংস্করণে সমর্থিত অ্যাসিঙ্ক্রোনাস আবিষ্কার ইন্টিগ্রেশন ব্যবহার করুন, অথবা প্রতিটি অনুরোধের সংকটপূর্ণ পথের বাইরে একটি সীমিত স্থানীয় এন্ডপয়েন্ট সেট সংগ্রহ ও রিফ্রেশ করুন। ব্লকিং কাজ সরাতে হলে সেই এক্সিকিউটরকে নিজস্ব সীমা ও টাইমআউট ব্যবস্থাপনা দিন; সীমাহীন সারি কেবল বিলম্বের জায়গা বদলায়।

প্রতিটি অনুরোধের জন্য স্বয়ংক্রিয়ভাবে আরেকটি আবিষ্কার কল করবেন না। স্বল্পস্থায়ী ক্যাশ বা লিজ নেওয়া ব্যাচ পুল সেবার উপর নির্ভরতা কমাতে পারে, যদি তার আয়ুষ্কাল সেবার প্রকৃত এন্ডপয়েন্ট নীতির সঙ্গে মেলে।

ব্যর্থ লুকআপের অর্থ নির্ধারণ করুন

খালি বা ব্যর্থ পুল প্রতিক্রিয়া নীরবে প্রক্সি মেটাডেটা সরিয়ে সরাসরি অনুরোধের অনুমতি দেয়া উচিত নয়। একটি স্পষ্ট ফলাফল বেছে নিন: কাজের বাজেটের মধ্যে অপেক্ষা, ব্যর্থ হওয়া, বা অনুমোদিত ক্যাশ করা এন্ডপয়েন্ট ব্যবহার।

পুল API-র নিজের রুটও পরিষ্কার রাখুন। এটি যদি অভ্যন্তরীণ সেবা হয়, তবে এর ব্যক্তিগত হোস্টনেম সেই প্রক্সির মধ্য দিয়ে পাঠানো, যা এটি বেছে নিতে সাহায্য করে, একটি চক্রাকার নির্ভরতা তৈরি করতে পারে।

আবিষ্কার অসংশ্লিষ্ট কাজ ব্লক না করে কাজ করলে সাধারণ প্রক্সি লেনদেন পরীক্ষা করুন। এগুলো আলাদা মেরামত, এবং তাদের সময়মাপন লগে আলাদা ক্ষেত্রের দাবিদার।

সম্পর্কিত নিবন্ধ