/ / Gevent: क्या यह प्रत्येक लूप पुनरावृत्ति में उपज करने के लिए एक अच्छा अभ्यास है? - अजगर, gevent, greenlets

Gevent: क्या यह प्रत्येक लूप पुनरावृत्ति में उपज करने के लिए एक अच्छा अभ्यास है? - अजगर, gevent, greenlets

मैं नोड.जेएस से आ रहा हूं जहां पुस्तकालय जैसे https://github.com/caolan/async घटना लूप को अवरुद्ध किए बिना सरणी के माध्यम से अतुल्यकालिक रूप से पुन: सक्रिय करने की अनुमति दें।

क्या मैं सही हूं कि गीवेन्ट के साथ इसे प्राप्त करने से कॉल किया जा सकता है sleep(0) प्रत्येक पाश पुनरावृत्ति पर?

क्या यह वास्तव में एक वेब सर्वर के लिए आवश्यक है जबकि डीबी क्वेरी पार्सिंग या पायथन कोड (आईओ ऑपरेशंस नहीं) के अवरुद्ध समय नगण्य है?

उत्तर:

जवाब के लिए 2 № 1

Gevent है gevent.idle() केवल उस उद्देश्य के लिए कॉल करें (जो अनियंत्रित प्रतीत होता है: http://www.gevent.org/gevent.html#useful-general-functions)।

हालांकि, यदि आप सुनिश्चित हैं कि लूप कुछ समय उपभोग करने वाले CPU भारी प्रोसेसिंग करेगा, तो इसे सही ढंग से समानांतर कार्यकर्ता के लिए ऑफ़लोड करना बेहतर होगा multiprocessing या धागे, लेकिन ध्यान रखें कि आपको गीवेंट के साथ अच्छी तरह से काम करने के लिए अतिरिक्त उपाय करना है (afaik)।


जवाब के लिए 0 № 2

आम तौर पर नहीं,

हालांकि, अगर पूरे सरणी को संसाधित करने के लिए आवश्यक CPU समय इतना बड़ा है कि यह उत्पन्न होने वाली विलंबता अस्वीकार्य है, तो आपको पूरी चीज़ को किसी अन्य प्रक्रिया / कार्य कतार प्रणाली में ऑफ़लोड करना चाहिए।

हर बार जब आप सोते हैं (0) आप अधिक ओवरहेड जोड़ते हैं (अंदर और बाहर स्विच), तो यह इसे और भी खराब बना देता है।

सीपीयू-बाउंड और आईओ-बाध्य कार्य सिर्फ एक ही प्रक्रिया में अच्छी तरह से मिश्रण नहीं करते हैं।

वैकल्पिक रूप से, यदि आपको कई समवर्ती कनेक्शन की आवश्यकता नहीं है, तो प्री-फोर्क सर्वर के साथ गीवेंट को प्रतिस्थापित करें।