Cấp cho mỗi proxy aiohttp ngân sách đồng thời riêng
Giới hạn công việc đang chạy trên từng proxy được chọn trong khi vẫn giữ giới hạn nhóm kết nối của aiohttp và việc dọn dẹp phản hồi.
Một nhóm proxy có thể chứa các điểm cuối có dung lượng rất khác nhau. Cho phép năm mươi thao tác trong toàn ứng dụng không ngăn bốn mươi chín trong số đó chọn cùng một proxy.
Nếu chính sách là “tối đa bốn thao tác đang chạy qua mỗi proxy được chọn”, hãy diễn đạt chính sách đó trực tiếp. Giữ một semaphore cho mỗi danh tính proxy và lấy nó quanh công việc tiêu thụ dung lượng của proxy.
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()Bản phác thảo này giả định asyncio đã được nhập và các URL proxy đã được xác thực. Đối với các yêu cầu công khai trên một tuyến proxy công cộng được phép, danh sách proxy HTTP cung cấp các ứng viên cho URL proxy của aiohttp. Một ứng dụng thực tế cũng nên đặt thời gian chờ yêu cầu riêng và quyết định cần bao nhiêu dữ liệu phản hồi. Đọc toàn bộ một tệp lớn vào bộ nhớ là một quyết định tài nguyên riêng.
Giữ giấy phép cho phần tốn kém
Giải phóng semaphore ngay khi tiêu đề phản hồi đến có thể vô hiệu hóa giới hạn dự định. Một phần thân truyền phát có thể tiếp tục sử dụng kết nối rất lâu sau đó. Giữ giấy phép cho đến khi phần thân được tiêu thụ hoặc phản hồi được đóng theo quy trình làm việc của ứng dụng.
Các trình quản lý ngữ cảnh lồng nhau làm cho việc dọn dẹp trở nên hữu hình khi một ngoại lệ hoặc hủy bỏ rời khỏi thao tác. Tránh tự lấy và chỉ giải phóng ở cuối một hàm thành công.
Giới hạn kết nối trả lời một câu hỏi khác
Các giới hạn của trình kết nối aiohttp giới hạn kết nối theo các quy tắc được ghi chú của trình kết nối. Chúng vẫn hữu ích bên cạnh semaphore của ứng dụng. Giới hạn kết nối trên mỗi đích không diễn đạt, chỉ bằng tên của nó, một ngân sách được chia sẻ bởi tất cả các đích được gán cho một proxy.
Cũng phân biệt tính đồng thời với tốc độ yêu cầu. Bốn yêu cầu tồn tại lâu và bốn yêu cầu rất ngắn dùng cùng một hạn mức đồng thời nhưng tạo ra tốc độ yêu cầu mỗi giây khác nhau. Một dịch vụ có chính sách tốc độ có thể cần điều tiết nhịp độ hoặc một bộ giới hạn tốc độ riêng.
Chọn một định danh proxy ổn định, không bí mật cho nhật ký và số liệu. Nếu hai URL mang thông tin xác thực tham chiếu đến cùng một nhóm dung lượng, hãy quyết định xem chúng có nên chia sẻ một ngân sách hay không. Ngược lại, các cổng hoặc tài khoản khác nhau có thể đại diện cho các giới hạn riêng khi người vận hành ghi chú như vậy.
Khi thông lượng giảm, hãy kiểm tra nơi công việc đang chờ: semaphore của bạn, trình kết nối, việc thiết lập kết nối proxy hay việc đọc phản hồi. Nâng tất cả các giới hạn cùng lúc khiến việc phân biệt đó khó hơn và có thể chuyển hàng đợi sang một proxy mà bạn không kiểm soát.