2010-11-06 15 views
5

मुझे इस विषय से संबंधित बहुत से धागे मिले हैं और अभी भी पूर्ण उत्तर की तरह लगभग कुछ भी नहीं है ... मैं इस पर आपकी सलाह ढूंढ रहा हूं।जब Popen.communicate() पर्याप्त नहीं है?

तो, यहां मेरी समस्या है: मुझे वास्तव में दोनों तरीकों से एक उपप्रोसेस के साथ संवाद करने की आवश्यकता है: मुझे अपने इनपुट में बहुत अधिक डेटा लिखना होगा और फ्लाई पर अपना आउटपुट प्राप्त करना होगा। इसके आसपास कोई रास्ता नहीं है। मेरा सबप्रोसेस मशहूर 'लंगड़ा' एमपी 3 एन्कोडर है, इनपुट मेरे फ़ंक्शन द्वारा जेनरेट की गई एक घंटे या अधिक लंबी पीसीएम ध्वनि है और आउटपुट एमपी 3 फ़ाइल है जिसे एन्कोडर को समाप्त करने के इंतजार किए बिना उपयोगकर्ता द्वारा खंड में भेज दिया जाना चाहिए।

दस्तावेज़ों के मुताबिक, Popen.communicate() मुझे दर्जनों या सैकड़ों मेगाबाइट में मापा आईपीसी संभालने में मदद नहीं करेगा। साथ ही, जैसा कि मैंने यहां से सीखा है, इस दृष्टिकोण को खरोंच से बनाने की कोशिश करना बहुत खतरनाक है क्योंकि बहुत से नुकसान इंतजार कर रहे हैं: डेडलॉक्स, बफरिंग, प्रोसेस मैनेजमेंट इत्यादि।

तो, मेरा सवाल है: क्या इस तरह की समस्या के लिए कुछ प्रसिद्ध समाधान है: एक पायथन लिब या एक कोड उदाहरण जो वास्तव में समस्या का समाधान करता है? कम से कम एक लेख हो सकता है या कुछ ऐसी चीजों को स्पष्ट रूप से दे रहा है जो किसी को स्वयं हल करने की कोशिश में भाग ले सकते हैं?

अग्रिम धन्यवाद, इल्या।

उत्तर

2

सबसे आसान तरीका है कि आप अपने प्रोग्राम को दो में विभाजित करें: एक जो लमेम को लिखता है और दूसरा जो लंगड़ा से पढ़ता है और उपयोगकर्ता को लिखता है। बिडरेक्शनल संचार के मुकाबले करना बहुत आसान है।

यदि यह आपके लिए काम नहीं करता है तो मुझे पारंपरिक पाइप आईपीसी से नामित पाइपों के साथ विकास बहुत आसान मिला है। परीक्षण के दौरान विभिन्न प्रकार की नलसाजी का उपयोग करना आसान है। Nonblocking I/O in Python 3 उन्हें अधिक आसान पहुंचाना चाहिए।

+0

यदि मुझे आपका विचार है तो मुझे तीन बाल प्रक्रियाएं लॉन्च करनी होंगी: एक इनपुट डेटा बनाने और इसे लंगड़ा लिखने के लिए, एक को लंगड़ा निष्पादित करने के लिए और एक आउटपुट प्राप्त करने और इसे उपयोगकर्ता को स्थानांतरित करने के लिए। मुझे यहां डराता है कि मुझे पूरा पर्यवेक्षण तर्क लागू करना होगा: बच्चों की प्रतीक्षा करें, संकेतों को पकड़ें और माता-पिता से बाहर निकलें और इसके विपरीत बच्चों को मार दें आदि – izhak

+0

पायथन 3 में एनबी के लिए - धन्यवाद, मैं इसे पढ़ूंगा। दुर्भाग्यवश इस विशिष्ट कार्य को कुछ साझा मेजबानों पर चलाना है जहां पायथन 2.4 एक दुखद वास्तविकता है। – izhak

+0

तीन बच्चे वास्तव में मेरे मन में थे। लेकिन आप सही हैं, यह अभी भी लागू करने के लिए परेशान है। मुद्दों के बारे में सबसे अच्छी चर्चा अभी भी यूनिक्स पर्यावरण में उन्नत प्रोग्रामिंग है - देखें http://www.kohala.com/start/apue.html - जिसे मैं अत्यधिक अनुशंसा कर सकता हूं। – max

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