यदि कहना है कि मैं पार्सिंग के लिए एक वेब पेज पुनर्प्राप्त करना चाहता हूं, लेकिन I/O होने पर CPU को अवरुद्ध नहीं करता हूं। क्या पाइथन की इवेंटलेट लाइब्रेरी के बराबर कुछ है?रुबी में गैर अवरोधन I/O निष्पादित करने का पसंदीदा तरीका क्या है?
उत्तर
मुझे यकीन नहीं है कि इवेंटलेट क्या करता है, लेकिन रूबी EventMachine है, गैर-अवरुद्ध आईओ (amongst other things) के लिए एक लाइब्रेरी है।
रूबी के लिए सबसे अच्छी HTTP क्लाइंट लाइब्रेरी Typhoeus है, इसका उपयोग गैर-अवरुद्ध फैशन में समानांतर में एकाधिक HTTP अनुरोध करने के लिए किया जा सकता है।
# blocking
response = Typhoeus::Request.get("http://stackoverflow.com/")
puts response.body
# non-blocking
request1 = Typhoeus::Request.new("http://stackoverflow.com/")
request1.on_complete do |response|
puts response.body
end
request2 = Typhoeus::Request.new("http://stackoverflow.com/questions")
request2.on_complete do |response|
puts response.body
end
hydra = Typhoeus::Hydra.new
hydra.queue(request1)
hydra.queue(request2)
hydra.run # this call is blocking, though
एक अन्य विकल्प em-http-request है, जो EventMachine के शीर्ष पर चलता है: वहाँ एक अवरुद्ध और गैर अवरुद्ध इंटरफेस है। यह एक पूरी तरह से गैर अवरुद्ध इंटरफ़ेस है:
EventMachine.run do
request = EventMachine::HttpRequest.new('http://stackoverflow.com/').get
request.callback do
puts request.response
EventMachine.stop
end
end
वहाँ भी समानांतर में कई अनुरोध, इसी तरह Typhoeus हाइड्रा को बनाने के लिए एक इंटरफेस है।
एम-http-request का नकारात्मक पक्ष यह है कि यह EventMachine से जुड़ा हुआ है। EventMachine अपने आप में एक शानदार ढांचा है, लेकिन यह एक सब कुछ या कुछ भी सौदा नहीं है। आपको अपने पूरे एप्लिकेशन को एक घटना/निरंतरता-गुजरने वाली शैली के फैशन में लिखना होगा, और यह मस्तिष्क के नुकसान के कारण ज्ञात है। टाइफियस उन अनुप्रयोगों के लिए बहुत बेहतर है जो पहले से ही नहीं किए गए हैं।
- 1. जावास्क्रिप्ट में लूप के लिए गैर-अवरोधन लिखने का सबसे साफ तरीका क्या है?
- 2. सीएसएस रोलओवर करने का पसंदीदा तरीका क्या है?
- 3. Symfony2 एप्लिकेशन को तैनात करने का पसंदीदा तरीका क्या है?
- 4. घटनाओं को बुलबुला करने का पसंदीदा तरीका क्या है?
- 5. अंडरस्कोर.जेएस कार्यों को चेन करने का पसंदीदा तरीका क्या है?
- 6. हैशकोड() को लागू करने का पसंदीदा तरीका क्या है?
- 7. पैरामीटर से संग्रह असाइन करने का पसंदीदा तरीका क्या है?
- 8. NumPy arrays को प्रीलाकेट करने का पसंदीदा तरीका क्या है?
- 9. दो सिंक को गठबंधन करने का पसंदीदा तरीका क्या है?
- 10. अवरोधन कार्य क्या है?
- 11. लॉग इन करने का पसंदीदा तरीका। Azure
- 12. पसंदीदा तरीका है?
- 13. रुबी में सिंगलटन पैटर्न लिखने का सही तरीका क्या है?
- 14. गणित अभिव्यक्ति निष्पादित करने का सबसे अच्छा तरीका क्या है?
- 15. रुबी के लिए पसंदीदा आरडीएफ टूलसेट क्या है?
- 16. Win32 में, क्या सॉकेट गैर-अवरुद्ध होने पर परीक्षण करने का कोई तरीका है?
- 17. रुबी मणि क्या है?
- 18. रूबी में सहायक तरीके का उपयोग करने का पसंदीदा तरीका क्या है?
- 19. सी # में वस्तुओं का निर्माण करने का पसंदीदा तरीका क्या है? निर्माता पैरामीटर या गुण?
- 20. # का पसंदीदा तरीका! खोल स्क्रिप्ट में
- 21. स्कैला में समांतर संग्रहों का उपयोग करने में पसंदीदा तरीका क्या है?
- 22. क्या ट्वीट की पसंदीदा गिनती पाने का कोई तरीका है?
- 23. RestKit 0.20 - नया NSManagedObject बनाने का पसंदीदा तरीका क्या है?
- 24. IO
- 25. रुबी में * (स्टार) का क्या अर्थ है?
- 26. बिल्डर पैटर्न में ऑर्डर प्रबंधित करने का पसंदीदा तरीका क्या है?
- 27. पायथन में एक हुक या कॉलबैक को लागू करने का पसंदीदा तरीका क्या है?
- 28. रेल 3 में खाली JSON प्रतिक्रिया वापस करने का पसंदीदा तरीका क्या है?
- 29. एसक्यूएल में खाली तालिका वापस करने का पसंदीदा तरीका क्या है?
- 30. क्लोजर में उपयोगकर्ता प्रमाणीकरण और प्रमाणीकरण करने का पसंदीदा तरीका क्या है?
जब आप कहते हैं कि हाइड्रा.रुन को कॉल अवरुद्ध कर रहा है, तो यह ठीक है, जब तक यह नींद की स्थिति में रहता है, और जब I/O पूरा हो जाता है तो जागृत हो जाता है। विंडोज़ में इवेंट संचालित I/O के साथ ही, मैं यही हासिल करना चाहता हूं। जो भी थ्रेड हाइड्रा.रुन कॉल किया जाता है, उसे ब्लॉक करते समय कोई सीपीयू नहीं लेना चाहिए, क्योंकि अनिवार्य रूप से यह किसी ईवेंट पर इंतजार कर रहा है। क्या यह हाइड्रा कैसे काम करता है? यदि नहीं, तो मुझे लगता है कि यह इस उद्देश्य को हरा देता है। अगर आप पुष्टि कर सकते हैं, तो मैं इसे स्वीकार कर लिया जाएगा। धन्यवाद। –
इस तरह यह काम करता है, कोई व्यस्त इंतजार नहीं है। – Theo
मेरे मामले में, मुझे वर्तमान थ्रेड को रिलीज़ करने की आवश्यकता है और बिल्कुल भी ब्लॉक नहीं करना चाहिए। 'Hydra.run' कॉल अवरुद्ध करने से बचने का कोई तरीका है? क्या कोई अन्य HTTP रूबी रत्न है जो पूरी तरह से गैर-अवरुद्ध दृष्टिकोण का समर्थन करता है? –