मैं सिर्फ यह देखा था, एक साल और थोड़ी देर बाद, लेकिन उम्मीद है कि नहीं भी ...
Typhoeus कुछ गूगलर के लिए देर से अब तक इसके लिए सबसे अच्छा समाधान। यह वास्तव में सुरुचिपूर्ण फैशन में libcurl लपेटता है। आप max_concurrency
को लगभग 200 तक चॉकिंग के बिना सेट कर सकते हैं।
टाइमआउट के संबंध में, यदि आप टाइफियस को :timeout
ध्वज पास करते हैं, तो यह केवल प्रतिक्रिया के रूप में टाइमआउट पंजीकृत करेगा ... और फिर आप चाहें तो पुनः प्रयास करने के लिए अनुरोध को फिर से अन्य हाइड्रा में भी डाल सकते हैं।
यहां आपका प्रोग्राम टायफियस के साथ पुनः लिखा गया है। उम्मीद है कि यह किसी भी व्यक्ति को बाद में इस पृष्ठ पर आने में मदद करता है!
require 'typhoeus'
urls = [
'http://www.google.com/',
'http://www.yandex.ru/',
'http://www.baidu.com/'
]
hydra = Typhoeus::Hydra.new
successes = 0
urls.each do |url|
request = Typhoeus::Request.new(url, timeout: 15000)
request.on_complete do |response|
if response.success?
puts "Successfully requested " + url
successes += 1
else
puts "Failed to get " + url
end
end
hydra.queue(request)
end
hydra.run
puts "Fetched all urls!" if successes == urls.length
स्रोत
2015-01-05 01:54:28
लगता है जैसे कि यह काम करता है। लेकिन 15 सेकंड के बाद सर्वर प्रतिक्रिया नहीं देता है तो थ्रेड को कैसे मारना है? – NVI
आप 'टाइमआउट.टाइटू (20) करते हैं .... एंड' का उपयोग कर सकते हैं। इससे कोई त्रुटि उत्पन्न होती है, हालांकि, आपको अपने प्रोग्राम के प्रवाह के साथ कुछ करने की आवश्यकता होगी, और टैगिंग का एक तरीका है कि यह जांचने के अलावा कि कोई सामग्री 'कुंजी' मौजूद है या नहीं, यह अनुरोध समाप्त हो गया है। –
रूबी का नेट :: HTTP थ्रेडसेफ है? – Daniel777