2010-10-16 13 views
5

मेरे पास एक पायथन एप्लिकेशन है, संक्षेप में, रिमोट सर्वर से डेटा प्राप्त करता है, इसे संसाधित करता है, सर्वर का जवाब देता है, और कभी-कभी संसाधित डेटा को डिस्क पर सहेजता है। मुझे जिस समस्या का सामना करना पड़ा है वह यह है कि लिखने के लिए लॉट है, और सहेजने की प्रक्रिया आधे मिनट से ऊपर ले सकती है। यह स्पष्ट रूप से एक अवरुद्ध ऑपरेशन है, इसलिए नेटवर्क IO इस समय के दौरान रुक गया है। मैं पृष्ठभूमि में सहेजने के लिए ऑपरेशन करने में सक्षम होना चाहता हूं, ताकि बात कर सकें, ताकि एप्लिकेशन सर्वर के साथ त्वरित रूप से संवाद कर सके।डिस्क IO को नेटवर्क IO को अवरुद्ध करने से रोकने के लिए मुझे किस थ्रेडिंग मॉड्यूल का उपयोग करना चाहिए?

मुझे पता है कि मैं शायद यह पूरा करने के मॉड्यूल सूत्रण किसी तरह की जरूरत है, लेकिन मैं नहीं बता सकता कि मतभेद thread, threading, multiprocessing के बीच विभिन्न अन्य विकल्प हैं, और। क्या कोई जानता है कि मैं क्या देख रहा हूं?

+1

संबंधित: http://stackoverflow.com/questions/2629680/deciding-between-subprocess-multiprocessing-and-thread-in-python –

उत्तर

6

चूंकि आप I/O बाध्य हैं, तो threading मॉड्यूल का उपयोग करें।

आपको लगभग thread का उपयोग करने की आवश्यकता नहीं है, यह निम्न स्तर का इंटरफ़ेस है; threading मॉड्यूल thread के लिए एक उच्च स्तरीय इंटरफ़ेस रैपर है।

multiprocessing मॉड्यूल थ्रेडिंग मॉड्यूल से अलग है, multiprocessing कार्य निष्पादित करने के लिए एकाधिक उपप्रोसेसेस का उपयोग करता है; multiprocessing सीखने की वक्र को कम करने के लिए बस उसी इंटरफेस का उपयोग threading के रूप में होता है। multiprocessing आमतौर पर तब उपयोग किया जाता है जब आपके पास सीपीयू बाध्य गणना होती है, और एक मल्टीकोर सीपीयू में जीआईएल (ग्लोबल इंटरप्रेटर लॉक) से बचने की आवश्यकता होती है।

बहु-थ्रेडिंग के लिए कुछ और गूढ़ विकल्प asyncore मॉड्यूल का उपयोग कर एसिंक्रोनस I/O है। एक और विकल्प में स्टैकलेस पायथन और ट्विस्ट शामिल हैं।

+1

(संपादन के लिए खेद है) बस यह इंगित करना चाहता था कि यह उत्तर पूरी तरह से नहीं है विशेष रूप से डिस्क I/O के संबंध में सटीक। असिंक्रोनस डिस्क I/O नॉनब्लॉकिंग से अलग है: अवरोधन एक सिस्टम कॉल को संदर्भित करता है जिसमें उत्तर नहीं है और समय लेने की गारंटी है - दूसरे शब्दों में, नेटवर्क और पाइप I/O। हालांकि, डिस्क से पढ़ने पर, I/O कभी भी "ब्लॉक" नहीं होगा: यह धीमा हो सकता है। nonconcore I/O पर एसिंककोर और मुड़ फोकस इसलिए इस स्थिति में मदद नहीं कर सकता है। थ्रेड * मदद * चाहिए, लेकिन मुझे डिस्क I/O के साथ जीआईएल द्वारा काटा गया है ... इस पर मुझे सही करने के लिए स्वतंत्र महसूस करें। –

संबंधित मुद्दे