सही समाधान सुनिश्चित करें कि फ़ाइल कई थ्रेड्स और प्रक्रियाओं का उपयोग करते समय कभी नहीं दूषित हो जाएगा क्या है।एक ही फाइल को समवर्ती लेखन और प्रक्रियाओं
सूत्र, जो त्रुटियों को खोलने के बारे में परवाह के लिए संस्करण।
lock = threading.RLock()
with lock:
try:
f = open(file, 'a')
try:
f.write('sth')
finally:
f.close() # try close in any circumstances if open passed
except:
pass # when open failed
प्रक्रियाओं मैं multiprocessing.Lock
का उपयोग करना चाहिए लगता है, लेकिन के लिए
अगर मैं 2 प्रक्रियाओं चाहते हैं, और पहली प्रक्रिया खुद 2 धागे (हर एक प्रयोग फाइल)
सिर्फ सिद्धांत है, लेकिन मैं जानता हूं कि थ्रेड और प्रक्रियाओं के साथ सिंक्रनाइज़ेशन कैसे मिलाएं। धागे प्रक्रिया से "उत्तराधिकारी" हैं ?, इसलिए केवल प्रक्रियाओं के बीच सिंकोननाइज़ेशन आवश्यक है?
और 2. मुझे यकीन है कि इसके बाद के संस्करण कोड के मामले में जरूरत नेस्टेड कोशिश जब लिखने असफल हो जायेगी अगर नहीं कर रहा हूँ, और हम पास फ़ाइल
एक तरफ ध्यान दें के रूप में, अपने 'try' /' finally' (और आमतौर पर होना चाहिए) एक 'with' बयान के साथ बदला जा सकता है। इसके अलावा, 'छोड़कर: पास' आमतौर पर एक बुरा विचार है-यदि आप किसी विशेष अपवाद को निगलने की कोशिश कर रहे हैं, तो बस उस विशेष को निगलें, सब कुछ नहीं। यदि आप यहां चारों ओर देखते हैं, तो आपको उन लोगों के दर्जनों प्रश्न मिलेंगे जिनके पास मूर्खतापूर्ण त्रुटियां थीं, जैसे एक फ़ाइल नाम के रूप में एक इंट पास करना, जो उन्हें छोड़कर और ध्यान देने से रोकता था। – abarnert
इसके अलावा, यदि आप विशेष रूप से फ़ाइलों के लिए लॉक कर रहे हैं, तो आप पीओएसईक्स पर सलाहकार फ़ाइल ताले का उपयोग करने और जेनेरिक थ्रेड/प्रोसेस लॉक के बजाय विंडोज़ पर विशेष फ़ाइल एक्सेस पर विचार करना चाह सकते हैं। – abarnert
एक और संभावना है कि एक ही थ्रेड (एक ही प्रक्रिया में) से जुड़ी सभी फाइलें करें, और हर कोई सिर्फ एक कतार में संदेश पोस्ट करे (जिसे किसी भी सिंक्रनाइज़ेशन की आवश्यकता नहीं है, क्योंकि यह निर्मित है)। – abarnert