2012-01-16 12 views
6

सहयोग करने के इच्छुक नहीं हैं जो लटकते कार्यों को मारने में सक्षम बनाता है असल में मेरे पास बहुत से कार्य हैं (लगभग 1000 के बैचों में) और इन कार्यों के निष्पादन समय व्यापक रूप से भिन्न हो सकते हैं (कम से कम दूसरे से 10 मिनट)। मुझे पता है कि यदि एक कार्य एक मिनट से अधिक समय तक निष्पादित कर रहा है तो मैं इसे मार सकता हूं। ये कार्य कुछ डेटा खनन मॉडल (लेकिन एक दूसरे से स्वतंत्र हैं) के अनुकूलन में कदम हैं और कुछ सी एक्सटेंशन फ़ंक्शन के अंदर अधिकतर समय व्यतीत कर रहे हैं ताकि अगर मैं उन्हें मारने की कोशिश करता तो वे सहयोग नहीं करेंगे।क्या पाइथन में कार्य कतार वितरित की गई है जो मुझे

क्या कोई वितरित कार्य कतार है जो उस स्कीमा में फिट बैठती है --- AFAIK: अजवाइन उन कार्यों को निरस्त करने की अनुमति देता है जो सहयोग करने के इच्छुक हैं। लेकिन मुझसे गलती हो सकती है।

मैंने हाल ही में शुद्ध पायथन Kill hanging function in Python in multithreaded enviorment में फांसी कार्यों को मारने के बारे में इसी तरह के सवाल पूछा।

मुझे लगता है कि मैं अजवाइन कार्य को घटा सकता हूं, इसलिए यह एक नई प्रक्रिया को जन्म देता है और उसके लंबे समय तक लगने पर इसके निष्पादन को निरस्त कर देता है, लेकिन फिर मुझे नए दुभाषिया के प्रारंभ के उपरांत से मार दिया जाएगा।

+0

क्या आपने 'IPython.parallel'' पर एक नज़र डाली? यह लोड संतुलन और टाइमआउट का समर्थन करता है। – Dietrich

उत्तर

6

Celerytime limiting का समर्थन करता है। आप लंबे समय तक चलने वाले कार्यों को मारने के लिए समय सीमा का उपयोग कर सकते हैं। हत्या कार्यों के अलावा आप नरम सीमाओं का उपयोग कर सकते हैं जो सॉफ़्टटाइमलिमिट को संभालने में सक्षम हैं कार्य में अपवाद और स्पष्ट रूप से कार्यों को समाप्त कर सकते हैं।

from celery.task import task 
from celery.exceptions import SoftTimeLimitExceeded 

@task 
def mytask(): 
    try: 
     do_work() 
    except SoftTimeLimitExceeded: 
     clean_up_in_a_hurry() 
0

Pistil असंगत कार्यों को मारने सहित कई प्रक्रिया प्रबंधन की अनुमति देता है।

लेकिन:

  • यह बीटा सॉफ्टवेयर है, भले ही वह शक्तियों gunicorn जो विश्वसनीय है
  • मैं नहीं जानता कि यह गाने 1000 प्रक्रियाओं प्रक्रिया के बीच
  • संचार संभाल शामिल नहीं है अभी तक है, तो आप 'उदाहरण के लिए सेटअप करने के लिए होगा अपने खुद का उपयोग कर zeromq

एक और संभावना timer signal तो यह 36000 सेकंड में एक अपवाद को जन्म देती है उपयोग करने के लिए है। लेकिन अगर कोई जीआईएल हासिल करता है, तो आप सिग्नल ट्रिगर नहीं होते हैं, जिसे आप सी प्रोग्राम कर सकते हैं।

0

जब आप एक अजवाइन कार्य को निरस्त कर, आप इसे एक वैकल्पिक terminate=True कीवर्ड के साथ प्रदान कर सकते हैं।

task.revoke(terminate=True) 

यह बिल्कुल अपनी आवश्यकताओं को फिट नहीं करता है के बाद से वह खुद को इस प्रक्रिया द्वारा नहीं किया है, लेकिन आप या तो काम वर्ग का विस्तार करने के आत्महत्या करने के लिए, या एक reccurring सफाई कार्य या प्रक्रिया के लिए सक्षम होने के लिए सक्षम होना चाहिए उन कार्यों को मारना जो समय पर पूरा नहीं हुए हैं।

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

  • कोई संबंधित समस्या नहीं^_^