2010-11-19 9 views
5

मैं एक स्क्रिप्ट है जो कई कार्यों को आरंभ करता चला रहा हूँ:एक स्क्रिप्ट कॉलिंग के बाद कार्य कतार खाली है

for i in range (0,5): 
    taskqueue.add(url='/example', 
          params={'num': i}) 

जहां तक ​​मैं समझता हूँ, कार्य समानांतर में चल रहे हैं। क्या वैसे भी मैं कतार में डाले गए सभी कार्यों को पूरा करने के बाद एक विशिष्ट कार्य/पायथन फ़ाइल चलाने के लिए ऐपइंजिन को बता सकता हूं? मैंने आखिरी लूप पुनरावृत्ति में बुलाए गए कार्यों को ध्वज भेजने के बारे में सोचा था, लेकिन यदि कार्य समानांतर में चलते हैं तो यह ज्ञात नहीं होता है कि एक बार यह खत्म हो जाने के बाद, अन्य भी समाप्त हो गए थे।

धन्यवाद,

योएल

उत्तर

4

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

class TaskBatch(db.Model): 
    expected_count = db.IntegerProperty() 

class TaskMarker(db.Model): 
    pass 

, की तरह कुछ करने के लिए अपने फोन दिनचर्या को समायोजित:

नए प्रकार: मोटे तौर पर, प्रक्रिया की तरह कुछ लग सकता है

count = 5 
taskbatch = TaskBatch(expected_count=count).put() 
for i in range(5): 
    taskqueue.add(url='/example', 
        params={'num': i, 'batch': str(taskbatch)}) 

और अपने कार्यों के अंत में, :

def post(self): 
    num = self.request.get('num') 
    # do your stuff.... 

    batch = self.request.get('batch') 
    TaskMarker(key_name=num, parent=db.Key(batch)) 
    taskqueue.add(url='/example/isdone', 
        params={'num': i, 'batch': str(taskbatch)}) 

और isdone काम की तरह कुछ दे सकता है:

def post(self): 
    num = self.request.get('num') 
    batch_key = db.Key(self.request.get('batch')) 
    batch = TaskBatch.get(batch_key) 
    marker_keys = [db.Key.from_path('TaskMarker', i, parent=batch) 
        for i in range(batch.expected_count)] 
    markers = db.get(marker_keys) 
    if all(markers): 
     # do your done action. 

सटीक प्रक्रिया आपके उपयोगकेस के विनिर्देशों के आधार पर थोड़ा भिन्न होगी, जैसे कि आपके डालने में कितने कार्य हैं।

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