का उपयोग करके पाइथन प्रोग्राम हाल ही में मुझे एक ऐसी स्क्रिप्ट लिखने की आवश्यकता है जो os.fork() दो प्रक्रियाओं में विभाजित करने के लिए करता है। बाल प्रक्रिया एक सर्वर प्रक्रिया बन जाती है और os.pipe() के साथ बनाए गए पाइप का उपयोग करके मूल प्रक्रिया में वापस डेटा पास करती है। बच्चे पाइप के 'r'
के अंत को बंद कर देता है और माता-पिता सामान्य रूप से पाइप के 'w'
अंत को बंद कर देता है। मैं os.fdopen के साथ फ़ाइल ऑब्जेक्ट्स में पाइप() से रिटर्न को रूपांतरित करता हूं।os.pipe और os.fork() समस्या
मेरी समस्या यह है कि: यह प्रक्रिया सफलतापूर्वक फोर्क है, और बच्चा सर्वर बन जाता है। सबकुछ बढ़िया काम करता है और बच्चे पाइप के खुले 'w'
के अंत में डेटा लिखता है। दुर्भाग्य से पाइप का मूल अंत दो अजीब चीजें करता है:
ए) यह पाइप के 'r'
के अंत में read()
ऑपरेशन पर अवरुद्ध करता है।
दूसरा, यह पाइप पर रखे गए किसी भी डेटा को पढ़ने में विफल रहता है जब तक कि 'w'
अंत पूरी तरह से बंद न हो जाए।
मैंने तुरंत सोचा कि बफरिंग समस्या थी और पाइप.फ्लश() कॉल, लेकिन इससे मदद नहीं मिली।
क्या कोई इस बात पर प्रकाश डाल सकता है कि लेखन अंत तक पूरी तरह से बंद होने तक डेटा क्यों प्रकट नहीं होता है? और क्या read()
कॉल करने के लिए कोई रणनीति नहीं है?
यह मेरा पहला पायथन प्रोग्राम है जो फोर्क या इस्तेमाल किए गए पाइप हैं, इसलिए अगर मैंने एक साधारण गलती की है तो मुझे माफ़ कर दो।
आप उपप्रक्रिया मॉड्यूल क्यों उपयोग नहीं कर रहे? –
मैंने सोचा कि सबप्रोसेस मॉड्यूल कमांड का आह्वान करने के लिए था। मैं कोड की दो शाखाओं, एक बच्चे के लिए और माता-पिता के लिए एक के साथ मजबूर कर रहा हूं। – Paradox
क्या आप कुछ कोड पोस्ट कर सकते हैं? –