मेरे पास एक ऐसी स्थिति है जहां मैं बहुत सारी फाइलें डाउनलोड कर रहा हूं। अभी सब कुछ एक मुख्य पायथन धागे पर चलता है, और हर कुछ मिनट में 3000 फाइलों को डाउनलोड करता है। समस्या यह है कि ऐसा करने में लगने वाला समय बहुत लंबा होता है। मुझे एहसास है कि पाइथन के पास कोई वास्तविक बहु-थ्रेडिंग नहीं है, लेकिन क्या ऐसा करने का एक बेहतर तरीका है? मैं कई धागे लॉन्च करने के बारे में सोच रहा था क्योंकि आई/ओ बाध्य संचालन को वैश्विक दुभाषिया ताला तक पहुंच की आवश्यकता नहीं है, लेकिन शायद मैं उस अवधारणा को गलत समझता हूं।कई I/O बाध्य संचालन करते समय पायथन में प्रदर्शन को अधिकतम कैसे करें?
उत्तर
हमेशा multiprocessing
पर एक नज़र डालें।
मल्टीथ्रेडिंग नेट पर I/O को तेज करने के विशिष्ट उद्देश्य के लिए ठीक है (हालांकि असीमित प्रोग्रामिंग भी अधिक प्रदर्शन प्रदान करेगी)। सीपीथन की मल्टीथ्रेडिंग काफी "सच" (मूल ओएस धागे) है - जो आप शायद सोच रहे हैं वह जीआईएल है, वैश्विक दुभाषिया ताला जो एक साथ पाइथन कोड चलाने से अलग धागे को रोकता है। लेकिन सभी आई/ओ प्राइमेटिव जीआईएल छोड़ते हैं, जबकि वे सिस्टम कॉल को पूरा करने की प्रतीक्षा कर रहे हैं, इसलिए जीआईएल आई/ओ प्रदर्शन पर प्रासंगिक नहीं है!
असीमित प्रोग्रामिंग के लिए, twisted के आसपास सबसे शक्तिशाली ढांचा twisted है, लेकिन यदि आप ऐसा प्रोग्रामिंग कभी नहीं कर चुके हैं तो इसमें लटका पाने में कुछ समय लग सकता है। थ्रेड के पूल के उपयोग के माध्यम से अतिरिक्त I/O प्रदर्शन प्राप्त करना शायद आपके लिए आसान होगा।
क्या ऐसा करने का एक बेहतर तरीका है?
हाँ
मैं मैं के बाद से एक से अधिक थ्रेड शुरू करने की सोच रहा था/ओ बाध्य संचालन
मत करो।
ओएस स्तर पर, प्रक्रिया में सभी थ्रेड I/O संसाधनों का सीमित सेट साझा कर रहे हैं।
यदि आप वास्तविक गति चाहते हैं, तो आपके प्लेटफॉर्म को सहन करने के रूप में कई हेवीवेट ओएस प्रक्रियाओं को जन्म दें। ओएस वास्तव में, प्रक्रियाओं के बीच I/O वर्कलोड को संतुलित करने के बारे में वास्तव में अच्छा है। इसे ओएस को सॉर्ट करें।
लोग कहेंगे कि 3000 प्रक्रियाओं को फैलाना बुरा है, और वे सही हैं। आप शायद एक समय में केवल कुछ सौ बनाना चाहते हैं।
आप वास्तव में निम्नलिखित चाहते हैं।
एक साझा संदेश कतार जिसमें 3000 यूआरआई कतारबद्ध हैं।
कुछ सौ श्रमिक जो कतार से पढ़ रहे हैं।
प्रत्येक कार्यकर्ता को कतार से यूआरआई मिलती है और फ़ाइल मिलती है।
कर्मचारी चल रहे रह सकते हैं। जब कतार खाली है, तो वे बस काम पर इंतजार कर बैठे रहेंगे।
"हर कुछ मिनट" आप 3000 यूआरआई को कतार में डंप करने के लिए श्रमिकों को काम करना शुरू कर देते हैं।
यह आपके प्रोसेसर पर हर संसाधन को जोड़ देगा, और यह काफी छोटा है। प्रत्येक कार्यकर्ता कोड की केवल कुछ पंक्तियां हैं। कतार लोड करना एक विशेष "प्रबंधक" है जो कोड की कुछ पंक्तियां भी है।
श्रमिक (जो अलग प्रक्रियाएं हैं) इस वैश्विक कतार को साझा करने में सक्षम कैसे हैं, जो संभावित रूप से अपनी प्रक्रिया में बैठता है? उदाहरण के लिए –
http://pypi.python.org/pypi/celery/। http://www.darkcoding.net/software/choosing-a-message-queue-for-python-on-ubuntu-on-a-vps/ http://stackoverflow.com/questions/1336489/job-queue- कार्यान्वयन के लिए अजगर –
Gevent इसके लिए एकदम सही है।
Greenlets की Gevent के उपयोग (एक ही अजगर प्रक्रिया में हल्के coroutines) आप अतुल्यकालिक संचालन कोड पठनीयता समझौता करने या अपने मिश्रण में सार 'रिएक्टर' अवधारणाओं को शुरू करने के बिना प्रदान करते हैं।
- 1. एंबेडेड पायथन - समय मॉड्यूल में अवरुद्ध संचालन
- 2. लिनक्स में परीक्षण IO प्रदर्शन
- 3. आप सर्वर प्रदर्शन को अधिकतम कैसे करते हैं?
- 4. कई मॉड्यूलस संचालन पर तार्किक संचालन अनुकूलित?
- 5. IO
- 6. पायथन में पहुंचते समय matlab संरचना को कैसे संरक्षित करें?
- 7. कई से कई रिश्तों में अधिकतम मूल्य
- 8. ऑपरेटर का उपयोग करते समय पढ़ने/लिखने के संचालन को अलग करने के लिए कैसे करें []
- 9. पायथन थ्रेडिंग और प्रदर्शन?
- 10. Django में कई रिलेशनशिप जहाजों पर कई() का उपयोग करते समय सत्यापन कैसे करें?
- 11. कस्टम व्यवहार पर निर्भरता संपत्ति को बाध्य करते समय त्रुटि
- 12. पायथन स्वत: पूर्णता प्रदर्शन मिलान कैसे करें?
- 13. पायथन - सूची संचालन
- 14. मेरे पायथन कोड को कई कक्षाओं में व्यवस्थित कैसे करें?
- 15. .NET अनुप्रयोग में I/O संचालन को सीमित कैसे करें?
- 16. jQuery कई बार फायरिंग बाध्य?
- 17. क्या संचालन परमाणु संचालन
- 18. प्रदर्शन गवर्नर अधिकतम
- 19. jQuery 'लाइव' विधि में कई ईवेंट बाध्य करें
- 20. कोरआउट्स प्रदर्शन में सुधार कैसे करते हैं
- 21. निष्क्रियता के बाद java.beans.Introspector.getBeanInfo को कॉल करते समय प्रदर्शन समस्याएं
- 22. एक बार में एकल बाइट बनाम कई पढ़ते समय प्रदर्शन?
- 23. फ़ाइल io
- 24. svn changelists: संचालन को "डिफ़ॉल्ट" चेंजलिस्ट में कैसे सीमित करें?
- 25. करते समय कई शर्तों के साथ छोरों
- 26. डब्ल्यूपीएफ कॉम्बोबॉक्स प्रदर्शन बड़े मुद्दों को बाध्य करके
- 27. सॉकेट io
- 28. पीडीओ में% के साथ कैसे बाध्य करें?
- 29. मेरे दृश्य में jquery घटनाओं को कैसे बाध्य करें
- 30. std :: बाध्य फ़ंक्शन बाध्य करें
ट्विस्ट और मल्टीप्रोसेसिंग के बीच, जो सर्वोत्तम प्रदर्शन लाभ प्रदान करने जा रहा है? – Rhubarb
ट्विस्ट विशेष रूप से नेटवर्किंग के लिए सबसे उपयुक्त है; यदि आप एसिंच नेटवर्क प्रोग्रामिंग की जटिलताओं के लिए उपयोग नहीं करते हैं तो मल्टीप्रोसेसिंग अधिक सरल है। – Amber