2011-08-11 18 views
5

मेरे पास एक पायथन स्क्रिप्ट है जो urllib2 का उपयोग करके यूआरएल अनुरोध करता है। मेरे पास 5 प्रक्रियाओं का एक पूल है जो असीमित रूप से चलाता है और एक फ़ंक्शन करता है। यह फ़ंक्शन वह है जो यूआरएल कॉल करता है, डेटा प्राप्त करता है, इसे आवश्यक प्रारूप में पार्स करता है, गणना करता है और डेटा सम्मिलित करता है। प्रत्येक यूआरएल अनुरोध के लिए डेटा की मात्रा भिन्न होती है।मॉनिटर स्टक पाइथन प्रक्रिया

मैं क्रॉन नौकरी का उपयोग करके हर 5 मिनट में इस स्क्रिप्ट को चलाता हूं। कभी-कभी जब मैं ps -ef | grep python करता हूं, तो मुझे अटक प्रक्रियाएं दिखाई देती हैं। क्या कोई तरीका है जहां मैं मल्टीप्रोसेसिंग कक्षा के भीतर प्रक्रियाओं का ट्रैक रख सकता हूं जो प्रक्रियाओं का ट्रैक रख सकता है, उनका राज्य अर्थ पूरा हो गया है, फंस गया है या मर चुका है?

मैं कैसे फोन async प्रक्रियाओं

pool = Pool(processes=5) 
pool.apply_async(getData,) 

यह है और निम्नलिखित GetData का एक हिस्सा है जो urllib2 अनुरोध करता है: कोड स्निपेट है

try: 
    Url = "http://gotodatasite.com" 

    data = urllib2.urlopen(Url).read().split('\n') 
except URLError, e: 
    print "Error:",e.code 
    print e.reason 
    sys.exit(0) 

वहाँ पर नज़र रखने के लिए एक रास्ता है प्रक्रियाओं को अटक गया और फिर से दोबारा शुरू किया?

+1

"अटक गया?" क्या आप इसका अर्थ समझ सकते हैं? –

+0

आपको उन्हें 'मल्टीप्रोसेसिंग' के साथ चलाने की आवश्यकता क्यों है? एकाधिक क्रॉन नौकरियों का उपयोग करने में क्या गलत है? –

+0

@ एंड्रयू: अटक गया मेरा मतलब है लटका प्रक्रिया। – ash

उत्तर

1

यदि आप मल्टीप्रोसेसिंग का उपयोग करने के इच्छुक हैं तो एक पिंग तंत्र लागू करें। आप उन प्रक्रियाओं की तलाश में हैं जो धीमे I/O की वजह से फंस गए हैं, मुझे लगता है?

व्यक्तिगत तौर पर मैं एक कतार (जरूरी नहीं कि एक कतार सर्वर) के साथ जाना होगा, कहना उदाहरण ~/jobs के लिए पर काम करने के लिए, तो एक प्रोग्राम है जो पहली नौकरी लेता है और यह करता है यूआरएल की एक सूची है। फिर यह केवल बहीखाता का मामला है - कहें, प्रोग्राम शुरू होने पर यह नोट करें और उसका पीआईडी ​​क्या है। यदि आपको धीमी नौकरियों को मारने की ज़रूरत है, तो बस पीआईडी ​​को मार दें और नौकरी को असफल के रूप में चिह्नित करें।

0

Google urllib2 और टाइमआउट के लिए Google। यदि टाइमआउट पहुंच गया है तो आपको अपवाद मिलता है, और प्रक्रिया अब और नहीं फंस गई है।

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