Giới hạn Python
Trong bài viết này, tôi sẽ hướng dẫn bạn cách tạo một trình trang trí để giới hạn thời gian thực thi của một hàm trong chương trình Python của bạn thông qua đa xử lý. Động lực chính của tôi để xây dựng trình trang trí này là giới hạn thời gian thực thi các hàm Python bằng một cú pháp đơn giản và các phụ thuộc tối thiểu Một cách tiếp cận ngây thơ là sử dụng bộ đếm thời gian bên trong hàm Python, kiểm tra định kỳ xem hàm Python đang thực thi có vượt quá giới hạn đó không, rồi thoát. Cách tiếp cận đó có thể phù hợp với giải pháp một lần đơn giản, nhưng bất kỳ cuộc gọi nào đến thư viện của bên thứ ba sẽ ngăn việc kiểm tra giới hạn thời gian Tôi cũng muốn một giải pháp kín đáo nhất có thể và có thể áp dụng dễ dàng trong toàn bộ cơ sở mã. Decorators cung cấp cú pháp đẹp và trừu tượng để đạt được mục tiêu này Với suy nghĩ đó, tôi biết mình muốn tạo một công cụ trang trí có thể gắn vào bất kỳ chức năng nào trong dự án của mình. Trình trang trí sẽ xử lý việc giới hạn thời gian thực hiện của chức năng ở một số lượng được chỉ định. Tôi cũng muốn giữ mọi thứ hoàn toàn bằng Python để hạn chế sự phụ thuộc/độ phức tạp của việc thêm loại bộ lập lịch này Những thách thức chính của việc này là
Để bắt đầu, tôi cần tạo một trình trang trí có thể lấy tham số làm đối số. Sau một số nghiên cứu, tôi đã tìm thấy một chủ đề tràn ngăn xếp tuyệt vời nơi mọi người đề xuất một số giải pháp Tôi đã làm theo kiến trúc được đưa ra trong một bài đăng của Peter Mortensen trong các bình luận để tạo ra một công cụ trang trí cho những người trang trí. Tôi sẽ không đi sâu vào cách thức hoạt động của nó, nhưng bạn có thể nhảy vào chủ đề để được giải thích chi tiết hơn. Để biết thêm thông tin về người trang trí, tôi thường vào đây để xem lại Sau đó, bạn có thể đính kèm trình trang trí này vào trình trang trí mà bạn muốn áp dụng cho chức năng của mình, cho phép bạn tham số hóa trình trang trí đó. Tôi muốn tạo một trình trang trí run_with_timer lấy thời gian thực hiện tối đa làm tham số. Nó trông như thế này Tiếp theo, chúng ta có thể điền mã để giới hạn thời gian thực hiện. Logic như sau; . Quá trình chính sẽ đặt bộ hẹn giờ và hủy quy trình con đang thực thi chức năng nếu nó vượt quá bộ hẹn giờ Mã để thiết lập đa xử lý gồm hai phần. Đầu tiên là một hàm mà tôi gọi là function_runner, nó hoạt động như một trình bao bọc chạy trong tiến trình mới để xử lý việc chạy hàm Python và trả về kết quả mà hàm đa xử lý có thể xử lý. Thứ hai là mã đa xử lý sinh ra quy trình mới, đặt bộ đếm thời gian, sau đó giết quy trình đã sinh ra nếu nó không hoàn thành đúng lúc Cuối cùng, tôi có thể tạo chức năng để bọc bằng trình trang trí run_with_timer của mình. Tôi sẽ gọi nó là gấu ngủ Khi chúng ta chạy hàm sleep_bear, nó sẽ kết thúc nếu vượt quá giới hạn thời gian được đặt trong tham số trang trí. Nếu hàm Python kết thúc trước thời hạn, trình xử lý send_end sẽ trả về kết quả sleeping_bear("Grizzly", hibernation=10)>> Grizzly is going to hibernate Tóm lại, tôi đã chỉ cho bạn cách tạo một trình trang trí để giới hạn thời gian thực hiện các hàm Python bằng cách sử dụng đa xử lý làm trình lập lịch biểu. Tôi đã có thể giải quyết ba vấn đề chính
Như một phần thưởng, tất cả đều được thực hiện với Python và không có sự phụ thuộc của bên thứ ba. Có một số chi phí để khởi chạy đa xử lý, nhưng mục tiêu của tôi là hạn chế các chức năng chạy lâu hơn, vì vậy đây không phải là công cụ giảm giá Nếu bạn thích điều này, hãy nhớ theo dõi tôi để hỗ trợ nhiều nội dung như thế này trong tương lai. Cảm ơn bạn đã đọc, và như mọi khi, nếu bạn có bất kỳ đề xuất hoặc phản hồi nào, vui lòng cho tôi biết trong phần nhận xét giới hạn là một thư viện python để thực hiện giới hạn tốc độ với các phụ trợ lưu trữ thường được sử dụng (Redis, Memcached & MongoDB) Được tài trợ bởi Zuplo - nền tảng Quản lý API có thể lập trình, được quản lý hoàn toàn. Thêm giới hạn tốc độ và hơn thế nữa vào API công khai của bạn sau vài phút, hãy dùng thử tại zuplo. com Lặn ngay trongKhởi tạo phụ trợ lưu trữ
Khởi tạo bộ giới hạn tốc độ với Chiến lược cửa sổ di chuyển
Khởi tạo giới hạn tốc độ
Khởi tạo giới hạn tốc độ một cách rõ ràng
Kiểm tra các giới hạn
Kiểm tra các giới hạn cụ thể mà không cần nhấn chúng
|