ให้พร็อกซี่ aiohttp แต่ละตัวมีงบประมาณการทำงานพร้อมกันของตัวเอง
จำกัดงานที่กำลังดำเนินการต่อพร็อกซี่ที่เลือก ขณะที่รักษาขีดจำกัดพูลการเชื่อมต่อของ aiohttp และการทำความสะอาดคำตอบ
พูลพร็อกซี่อาจมีปลายทางที่มีความสามารถต่างกันมาก การอนุญาตให้มีห้าสิบการดำเนินการทั่วทั้งแอปพลิเคชันไม่ได้ป้องกันไม่ให้สี่สิบเก้าในนั้นเลือกพร็อกซี่เดียวกัน
หากนโยบายคือ «การดำเนินการที่กำลังทำอยู่ไม่เกินสี่รายการผ่านพร็อกซี่ที่เลือกแต่ละตัว» ให้แสดงนโยบายนั้นโดยตรง เก็บเซมาฟอร์สำหรับแต่ละอัตลักษณ์พร็อกซี่ และรับมันรอบงานที่ใช้ความสามารถของพร็อกซี่
limits = {proxy: asyncio.Semaphore(4) for proxy in proxy_urls}
async def fetch(session, proxy, url):
async with limits[proxy]:
async with session.get(url, proxy=proxy) as response:
return await response.read()แบบร่างนี้ถือว่า asyncio ถูกนำเข้าแล้วและ URL ของพร็อกซี่ได้รับการตรวจสอบแล้ว สำหรับคำขอสาธารณะบนเส้นทางพร็อกซี่สาธารณะที่ได้รับอนุญาต รายการพร็อกซี่ HTTP ให้ผู้สมัครสำหรับ URL พร็อกซี่ของ aiohttp แอปพลิเคชันจริงควรกำหนดเวลาหมดเวลาของคำขอเองและตัดสินว่าต้องการข้อมูลคำตอบเท่าใด การอ่านไฟล์ขนาดใหญ่ทั้งหมดเข้าสู่หน่วยความจำเป็นการตัดสินใจเรื่องทรัพยากรแยกต่างหาก
เก็บใบอนุญาตไว้สำหรับส่วนที่แพง
การปล่อยเซมาฟอร์ทันทีที่ส่วนหัวของคำตอบมาถึงอาจทำให้ขีดจำกัดที่ตั้งใจไว้ล้มเหลว เนื้อความแบบสตรีมมิ่งอาจใช้การเชื่อมต่อต่อไปอีกนานหลังจากนั้น เก็บใบอนุญาตไว้จนกว่าเนื้อความจะถูกใช้หมดหรือคำตอบถูกปิดตามลำดับงานของแอปพลิเคชัน
ตัวจัดการบริบทแบบซ้อนทำให้การทำความสะอาดมองเห็นได้เมื่อข้อยกเว้นหรือการยกเลิกออกจากการดำเนินการ หลีกเลี่ยงการรับด้วยมือและการปล่อยเฉพาะที่ด้านล่างของฟังก์ชันที่สำเร็จ
ขีดจำกัดการเชื่อมต่อตอบคำถามอื่น
ขีดจำกัดของคอนเน็กเตอร์ aiohttp จำกัดการเชื่อมต่อตามกฎที่บันทึกไว้ของคอนเน็กเตอร์ ขีดจำกัดยังมีประโยชน์ควบคู่กับเซมาฟอร์ของแอปพลิเคชัน ขีดจำกัดการเชื่อมต่อต่อปลายทางไม่ได้แสดงถึง ตามชื่อของมันเพียงอย่างเดียว งบประมาณที่ใช้ร่วมกันโดยปลายทางทั้งหมดที่กำหนดให้พร็อกซี่เดียว
แยกการทำงานพร้อมกันออกจากอัตราคำขอด้วย สี่คำขออายุยืนและสี่คำขอที่สั้นมากใช้โควตาการทำงานพร้อมกันเดียวกันแต่ให้อัตราคำขอต่อวินาทีที่ต่างกัน บริการที่มีนโยบายอัตราอาจต้องควบคุมจังหวะหรือใช้ตัวจำกัดอัตราแยก
เลือกตัวระบุพร็อกซี่ที่เสถียรและไม่เป็นความลับสำหรับบันทึกและเมตริก หาก URL สองรายการที่มีข้อมูลรับรองอ้างถึงพูลความสามารถเดียวกัน ให้ตัดสินว่าควรแบ่งงบประมาณเดียวกันหรือไม่ ในทางกลับกัน พอร์ตหรือบัญชีที่ต่างกันอาจแทนขีดจำกัดแยกเมื่อผู้ดูแลระบบบันทึกไว้เช่นนั้น
เมื่อปริมาณงานลดลง ให้ตรวจสอบว่ามีงานรออยู่ที่ใด: เซมาฟอร์ของคุณ คอนเน็กเตอร์ การตั้งค่าการเชื่อมต่อพร็อกซี่ หรือการอ่านคำตอบ การเพิ่มขีดจำกัดทั้งหมดพร้อมกันทำให้แยกความแตกต่างได้ยากขึ้นและอาจย้ายคิวไปยังพร็อกซี่ที่คุณไม่ได้ควบคุม