2011-06-30 26 views
5

मेरे पास एक मूल कार्य है जो एक मनमानी और संभावित रूप से बड़े पैमाने पर उप-कार्यक्षेत्रों को जन्म देगा। एक बार माता-पिता और सभी उप-कार्य दोनों पूर्ण हो जाने के बाद मुझे यह इंगित करने के लिए मेरे डेटाबेस में ध्वज सेट करने की आवश्यकता है कि यह तैयार है। मैं ऐसा करने के लिए सबसे अच्छा कैसे जाना होगा?पता लगाना जब एक अजवाइन कार्य और सभी सबटास्क

उदाहरण के लिए:

@task() 
def master_task(foo): 
    foo_obj = Foo.objects.get(id=foo) 
    for bar in foo_obj.bar_set.all(): 
     more_work.delay(bar.id) 

@task() 
def more_work(bar): 
    bar_obj = Bar.objects.get(id=bar) 
    do_work() 

मैं जब master_task और उप-कार्य यह spawns है के सभी पूरी कर ली है, ताकि मैं संकेत मिलता है कि सब कुछ तैयार है एक संबंधित मॉडल पर एक झंडा सेट कर सकते हैं पता लगाने के लिए की जरूरत है

उत्तर

4

उपयोग chords

आप का उपयोग करना चाहिए एक [TaskSet] [1]: > TaskSet एक बार में कई कार्यों के लिए आसान मंगलाचरण में सक्षम बनाता है, और उसके बाद में परिणामों में शामिल होने में सक्षम है वही आदेश जैसे कार्यों को बुलाया गया था।
+0

ध्यान दें कि "टास्कसेट हटा दिया गया है, क्योंकि इसे सेलेरी 3.0 में समूह निर्माण द्वारा प्रतिस्थापित किया गया था।" – np8

2

celery.chord इसके लिए ठीक से डिज़ाइन किया गया है।

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