क्या आपकी पाइथन लिपि लिखने या पढ़ने के लिए फ़ाइल खोलने की इच्छा रखती है? क्या विरासत एप्लिकेशन लिखने के बीच फ़ाइल खोल रहा है और बंद कर रहा है, या क्या यह इसे खुला रखता है?
यह बेहद जरूरी है कि हम समझें कि विरासत आवेदन क्या कर रहा है, और आपकी पाइथन लिपि क्या हासिल करने का प्रयास कर रही है।
कार्यक्षमता का यह क्षेत्र अत्यधिक ओएस-निर्भर है, और तथ्य यह है कि आपके पास विरासत अनुप्रयोग पर कोई नियंत्रण नहीं है केवल दुर्भाग्य से चीजों को कठिन बनाता है। चाहे ऐसा करने के लिए एक पाइथोनिक या गैर-पायथनिक तरीका है, शायद आपकी चिंताओं का सबसे कम होगा - कठिन सवाल यह होगा कि आप जो हासिल करने की कोशिश कर रहे हैं, वह संभव होगा।
अद्यतन
ठीक है, (अपनी टिप्पणी से) तो जानते हुए भी कि:
विरासत आवेदन खोल रहा है और फ़ाइल हर एक्स मिनट बंद करने, लेकिन मुझे नहीं पता यह मानना है कि टी = t_0 + n * एक्स + eps पर यह पहले से ही फ़ाइल बंद कर दिया गया है।
तो समस्या के पैरामीटर बदल दिए गए हैं। यह वास्तव में कुछ मान्यताओं, या ओएस-निर्भर और ओएस-स्वतंत्र तकनीकों के संयोजन के रूप में एक ओएस-स्वतंत्र तरीके से किया जा सकता है। :)
- ओएस-स्वतंत्र तरीके: अगर यह मान लेना कि विरासत आवेदन फाइल ज्यादा से ज्यादा समय की कुछ ज्ञात मात्रा के लिए खुला रहता है सुरक्षित है, कहते हैं कि
T
सेकंड (जैसे, फ़ाइल को खोलता है एक लिखने करता है , फिर फ़ाइल को बंद कर देता है), और प्रत्येक X
सेकंड में इसे कम या कम खुलता है, जहां X
2 * T
से बड़ा है।
stat
फ़ाइल
- घटाना
now()
से फाइल के संशोधन समय, उपज D
- अगर
T
< = D
< X
तो फ़ाइल को खोलने और आप इसे
- साथ की जरूरत है यह काफी सुरक्षित किया जा सकता है कर आपके आवेदन के लिए।
T
/X
के रूप में सुरक्षा बढ़ जाती है। * निक्स पर आपको उचित समय-चरणबद्ध बनाम स्लीव कॉन्फ़िगरेशन (टिंकर देखें) के लिए /etc/ntpd.conf
को दोबारा जांचना पड़ सकता है। विंडोज के लिए देखें MSDN
- विंडोज: (या इन-एवज) ऊपर ओएस स्वतंत्र विधि के अलावा, आप का उपयोग करने के प्रयास कर सकते हैं या तो:
- शेयरिंग (ताला लगा): इस मानता है कि विरासत कार्यक्रम भी साझा मोड में फ़ाइल खोलता है (आमतौर पर विंडोज़ ऐप्स में डिफ़ॉल्ट); इसके अलावा, यदि आपका एप्लिकेशन लॉक प्राप्त करता है जैसे विरासत एप्लिकेशन एक ही (दौड़ की स्थिति) का प्रयास कर रहा है, तो विरासत आवेदन विफल हो जाएगा।
- यह बेहद घुसपैठ और त्रुटि प्रवण है। जब तक कि नए एप्लिकेशन और विरासत अनुप्रयोग दोनों को एक ही फ़ाइल में लिखने के लिए सिंक्रनाइज़ करने की आवश्यकता नहीं होती है और आप फ़ाइल के उद्घाटन से वंचित विरासत एप्लिकेशन की संभावना को संभालने के इच्छुक हैं, तो इस विधि का उपयोग न करें।
- पता लगाने के लिए क्या फ़ाइलें ProcessExplorer रूप में एक ही तकनीक का उपयोग विरासत आवेदन में खुले हैं, प्रयास कर (के बराबर * nix के
lsof
)
- आप और भी अधिक कमजोर ओएस की तुलना में स्थिति दौड़ के लिए कर रहे हैं स्वतंत्र तकनीक
- लिनक्स/आदि।: इसके अलावा में (या इन-एवज) ऊपर ओएस स्वतंत्र विधि की, तो आप कुछ सिस्टम पर, बस की जाँच जो
आप
- को प्रतीकात्मक कड़ी
/proc/<pid>/fd/<fdes>
अंक फाइल lsof
के रूप में उसी तकनीक का उपयोग करने के लिए प्रयास कर सकते हैं या, ओएस-स्वतंत्र तकनीक
- की तुलना में दौड़ की स्थिति के लिए और भी कमजोर हैं, यह बेहद असंभव है कि विरासत एप्लिकेशन लॉकिंग का उपयोग करता है, लेकिन यदि ऐसा है, तो लॉकिंग वास्तविक विकल्प नहीं है जब तक कि विरासत एप्लिकेशन लॉक फ़ाइल को गर्व से संभाल नहीं सकता अवरुद्ध करके, अवरुद्ध नहीं - और यदि आपका स्वयं का आवेदन गारंटी दे सकता है कि फ़ाइल लॉक नहीं रहेगी, तो समय के विस्तार के लिए विरासत आवेदन को अवरुद्ध कर दिया जाएगा।)
अद्यतन 2
तो पक्ष "जाँच विरासत आवेदन फाइल खुला है या नहीं" (दखल दृष्टिकोण की स्थिति दौड़ के लिए प्रवण) तो आप ने कहा कि दौड़ हल कर सकते हैं द्वारा शर्त:
- जांच कर रहा है कि विरासत एप्लिकेशन में फ़ाइल खुली है (एक ला
lsof
या ProcessExplorer
)
- विरासत आवेदन प्रक्रिया को निलंबित
- चरण 1 में चेक दोहराने के लिए यह पुष्टि करने के लिए कि विरासत अनुप्रयोग चरण 1 और 2 के बीच फ़ाइल नहीं खोलता है; देरी और चरण 1 पर पुनरारंभ करें, अन्यथा चरण 4
- फ़ाइल पर अपना व्यवसाय करने के लिए आगे बढ़ें - आदर्श रूप से इसे कम से कम समय के लिए निलंबित किया गया है, विरासत आवेदन को कम से कम
के लिए निलंबित किया गया है
- विरासत अनुप्रयोग प्रक्रिया को फिर से शुरू करने
क्या आप लॉग रोटेशन प्राप्त करने की कोशिश कर रहे हैं ?? – vladr
बिल्कुल नहीं, लेकिन बहुत दूर नहीं है। मैं एक मौजूदा के शीर्ष पर एक एप्लीकेशन बनाना चाहता हूं। –