2012-11-14 9 views
6

multiprocessing.terminate() के लिए अजगर दस्तावेज़ को देख जबकि मैं निम्नलिखित भर में आया था:Mulitprocessing, समाप्त कर देंगे और भ्रष्ट कतारों

Terminate() If this method is used when the associated process is using a pipe or queue then the pipe or queue is liable to become corrupted and may become unusable by other process. Similarly, if the process has acquired a lock or semaphore etc. then terminating it is liable to cause other processes to deadlock.

कौन सा मूल रूप से कहते हैं अगर आप एक प्रक्रिया है जो एक कतार, पाइप या इसी तरह आप चलाने उपयोग कर रहा है समाप्त संरचना का खतरा भ्रष्ट हो रहा है।

मैं इस बारे में सवाल की एक जोड़ी है,

  1. पाइप, कतार या इसी तरह अगर एक भ्रष्टाचार होता है से डेटा पुनः प्राप्त करने की कोशिश कर किसी अन्य प्रक्रिया का क्या होगा?
  2. प्रक्रिया कैसे जांच सकती है कि भ्रष्टाचार है या नहीं?
  3. यदि आप जानते हैं कि किसी अन्य प्रक्रिया को समाप्त कर दिया गया है तो क्या डेडलॉक किसी भी तरह से हल किया जा सकता है?

मैं समझता हूँ कि तुम हमेशा समाप्त का उपयोग नहीं करने के लिए प्रयास करना चाहिए, लेकिन यह है कि स्थिति है जहाँ आप कुछ और नहीं कर सकता के लिए है, लेकिन यह

+0

1. यह IOError उठाता है: [Errno 32] टूटा हुआ पाइप – andrean

उत्तर

1

ठीक है, तो यह सबसे अच्छा समाधान नहीं था, लेकिन मैंने सबसे पहले अपवादों को यथासंभव सर्वोत्तम तरीके से संभाला है। मैं भ्रष्टाचार का खतरा नहीं उठाना चाहता था इसलिए अब मैं आवेदन को फिर से शुरू कर सकता हूं जहां संभावित मुद्दों के मौके को कम करने के लिए भ्रष्टाचार की संभावना है।

धन्यवाद @MarmwanAlsabbagh आपके सुझाव के लिए।

3

आप डेटा आपके आस-पास भेज देंगे और उनसे जाँच के ब्लॉक करने के लिए चेकसम जोड़ सकता है कोई डेटा भ्रष्टाचार की पुष्टि करने के लिए। यह किसी भी डेटा संचार में एक आम तकनीक है जिसमें डेटा भ्रष्टाचार का खतरा होता है। आप इसके लिए hashlib देख सकते हैं और एमडी 5 या सीआरसी 32 चेकसम जैसे कुछ का उपयोग कर सकते हैं।

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