2012-02-11 38 views
5

tôi cần phải điều chỉnh mức độ thường xuyên một trường hợp mechanize kết nối với một API (một lần mỗi 2 giây, vì vậy các kết nối giới hạn đó hoặc hơn)Điều hoà/giới hạn tốc độ ruby ​​cơ giới hóa

Vì vậy, đây:

instance.pre_connect_hooks << Proc.new { sleep 2 } 

Tôi đã nghĩ rằng điều này sẽ làm việc, và nó loại BUT bây giờ mọi phương pháp trong lớp đó ngủ trong 2 giây, như thể trường hợp cơ giới là xúc động và nói để giữ 2 giây. Tôi sẽ thử một móc nối kết nối bài, nhưng rõ ràng là tôi cần một cái gì đó phức tạp hơn một chút, nhưng những gì tôi không biết vào thời điểm này.

Mã giải thích rõ hơn vì vậy nếu bạn quan tâm theo dõi: https://github.com/blueblank/reddit_modbot, nếu không thì câu hỏi của tôi liên quan đến cách hiệu quả và hiệu quả giới hạn trường hợp Cơ chế trong một khung thời gian cụ thể được chỉ định bởi API (nơi vượt quá giới hạn đó yêu cầu và lệnh cấm). Ngoài ra, tôi đoán rằng tôi cần phải tích hợp tốt hơn một ví dụ cơ giới hóa cho lớp của tôi, bất kỳ con trỏ nào cũng được đánh giá cao.

+0

http://www.ruby-doc.org/core-1.9.2/Kernel.html#method-i-sleep Tôi đoán rằng giấc ngủ quá lớn cho một chiếc búa này – blueblank

Trả lời

2

Móc kết nối trước và sau được gọi trên mọi kết nối, vì vậy nếu có một số chuyển hướng, nó có thể kích hoạt nhiều lần cho một yêu cầu. Thử history_added chỉ được gọi một lần:

instance.history_added = Proc.new {sleep 2} 
+0

Điều này dường như đang hoạt động, và không làm mọi thứ khác. – blueblank

1

Tôi sử dụng SlowWeb để giới hạn cuộc gọi đến một URL cụ thể.

require 'slowweb' 
SlowWeb.limit('example.com', 10, 60) 

Trong trường hợp này, lệnh gọi tới miền example.com được giới hạn trong 10 yêu cầu 60 giây một lần.

Các vấn đề liên quan