2011-10-19 11 views
10

मेरे पास एक पाइपलाइन है जो किसी बिंदु पर विभिन्न उप-प्रक्रियाओं में काम करती है जो समानांतर में समान कार्य करती हैं। इस प्रकार उनके आउटपुट को एक ही फाइल में जाना चाहिए।क्या होता है यदि दो पायथन स्क्रिप्ट एक ही फ़ाइल में लिखना चाहते हैं?

क्या यह कहना बहुत जोखिम भरा है कि उन सभी प्रक्रियाओं को एक ही फाइल में लिखना चाहिए? या क्या पाइथन कोशिश करता है और पुनः प्रयास करता है अगर यह देखता है कि यह संसाधन कब्जा कर लिया गया है?

उत्तर

7

सामान्यतः, यह एक अच्छा विचार नहीं है और सही होने के लिए बहुत सावधानी बरतनी होगी। चूंकि लिखने को क्रमबद्ध करना होगा, इसलिए यह स्केलेबिलिटी पर भी प्रतिकूल प्रभाव डाल सकता है।

मैं फ़ाइलों को अलग करने और विलय करने के लिए लिखने की सिफारिश करता हूं (या उन्हें अलग फ़ाइलों के रूप में छोड़कर)।

+0

ओह ठीक है! यह स्केलेबिलिटी को कैसे प्रभावित कर सकता है? आपका मतलब है कि अगर अचानक कई प्रक्रियाएं एक ही फाइल में लिखना चाहती हैं और एक-दूसरे को पकड़ती हैं? – dmeu

+0

@ डीमेयू: यह मूल रूप से यह है। यदि आपके पास एक ही समय में लिखने की इच्छा रखने वाली कई प्रक्रियाएं हैं, तो उनमें से केवल एक ही सक्षम हो जाएगी, और शेष केवल उपयोगी काम करने के बजाय प्रतीक्षा करेंगे। – NPE

8

यह सिस्टम निर्भर है। विंडोज़ में, संसाधन लॉक है और आपको अपवाद मिलता है। लिनक्स में आप दो प्रक्रियाओं के साथ फ़ाइल (लिखित डेटा मिलाया जा सकता है)

आदर्श रूप में इस तरह के मामलों में लिख सकते हैं आप साझा संसाधनों तक पहुँच सिंक्रनाइज़ करने के लिए संकेतबाहु उपयोग करना चाहिए।

तो सेमाफोर का उपयोग कर अपनी आवश्यकताओं के लिए बहुत भारी है, तो केवल वैकल्पिक अलग फ़ाइलों में लिखने के लिए है ...

संपादित: जैसा कि a later post में आंख से कहा, एक संसाधन प्रबंधक के लिए एक और विकल्प है समवर्ती लेखकों को संभाल लें

3

एक बेहतर समाधान संसाधन प्रबंधक (लेखक) को एक ही फ़ाइल खोलने से बचने के लिए एक बेहतर समाधान है। कुछ प्लेटफ़ॉर्म पर एक साथ पहुंच से बचने के लिए यह प्रबंधक थ्रेडिंग सिंक्रनाइज़ेशन तंत्र (threading.Lock) का उपयोग कर सकता है।

+0

ठीक है मुझे इस विकल्प को देखना होगा। यह क्लस्टर पर भी काम करेगा, है ना? जिसका मतलब है कि विभिन्न कंप्यूटरों पर गणना की जाती है, लेकिन फाइल सिस्टम को साझा करते हैं जहां वे अपने परिणाम लिखते हैं – dmeu

+0

विभिन्न प्रक्रियाएं थ्रेडिंग साझा नहीं कर सकती हैं। लॉक। – marcv81

1

कैसे विभिन्न प्रक्रियाओं के सभी होने के बारे में एक कतार में अपने उत्पादन में लिखते हैं, और एक भी प्रक्रिया है कि कि कतार पढ़ता है, और फाइल करने के लिए लिखता है है?

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