2012-01-06 25 views
6

मैं सिर्फ एक Django परियोजना में अजवाइन के साथ शुरू कर रहा हूं, और इस विशेष समस्या पर थोड़ी सी अटक गया हूं: असल में, मुझे विभिन्न श्रमिकों को एक लंबे समय से चलने वाले कार्य को वितरित करने की आवश्यकता है। कार्य वास्तव में कई चरणों में टूट गया है, जिनमें से प्रत्येक को पूरा करने में काफी समय लगता है। इसलिए, यदि कुछ कदम विफल हो जाते हैं, तो मैं पूरा कार्य से परिणामों का पुन: उपयोग करने के लिए एक ही कार्यकर्ता का उपयोग करके इस कार्य को पुनः प्रयास करने के लिए अजवाइन चाहूंगा। मैं समझता हूं कि सेलेरी कुछ सर्वर पर कार्यों को वितरित करने के लिए रूटिंग का उपयोग करती है, लेकिन मुझे इस विशेष समस्या के बारे में कुछ भी नहीं मिल रहा है। मैं अपने ब्रोकर के रूप में RabbitMQ का उपयोग करता हूं।उसी कार्यकर्ता का उपयोग करके सेलेरी पुनः प्रयास कैसे करें?

उत्तर

11

आप हर celeryd उदाहरण हो सकता था कार्यकर्ता की होस्ट नाम के नाम पर एक कतार से उपभोग:

celeryd -l info -n worker1.example.com -Q celery,worker1.example.com 

worker1.example.com को होस्ट नाम निर्धारित हैं और यह नाम की एक कतार है, साथ ही डिफ़ॉल्ट कतार से खपत होगी (नाम celery)।

task.apply_async(args, kwargs, queue="worker1.example.com") 

similary एक पुनः प्रयास निर्देशित करने के लिए:

task.retry(queue="worker1.example.com") 

या एक ही कार्यकर्ता को पुन: प्रयास करें निर्देशित करने के लिए:

फिर एक विशिष्ट कर्मी को कार्य आप उपयोग कर सकते हैं निर्देशित करने के लिए

task.retry(queue=task.request.hostname) 
+0

उत्तर के लिए बहुत बहुत धन्यवाद! मुझे लगता है कि यह वही है जो मैं ढूंढ रहा हूं। मुझे एहसास नहीं हुआ कि हम कतार नाम को पुनः प्रयास करने के लिए पारित कर सकते हैं(), लेकिन अब यह बहुत समझ में आता है :) – dangmai

+0

'celeryd' अब बहिष्कृत है,' अजवाइन कार्यकर्ता 'का उपयोग करें। – user

+0

कमांडलाइन बनाने के लिए विंडोज़ पर '% computername%' और लिनक्स पर '\' होस्टनाम \ '' का प्रयोग करें। – ubershmekel

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