2011-12-08 17 views
8

पर आधारित django-celery का उपयोग करके अनुसूची कार्य I dangoango का उपयोग कर एक रिपोर्टिंग पोर्टल बना रहा हूं। इस पोर्टल में मुझे उपयोगकर्ताओं को पुन: आवंटित आधार पर चलाने के लिए रिपोर्ट शेड्यूल करने की क्षमता प्रदान करने की आवश्यकता है। मैं django-celery का शोध कर रहा हूं और समझता हूं कि आप आवधिक कार्य को शेड्यूल करने के लिए आवधिक_टास्क सजावट का उपयोग कर सकते हैं लेकिन सभी उदाहरणों में मैंने देखा है कि क्रॉन शेड्यूल की जानकारी सजावटी में हार्ड कोड की गई है।उपयोगकर्ता इनपुट

@periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon")) 

वहाँ Django-अजवाइन का उपयोग कर एक reoccurring कार्य गतिशील रूप से एक उपयोगकर्ता से इनपुट के आधार पर शेड्यूल करने के लिए कोई तरीका है?

उदाहरण के लिए, यदि कोई उपयोगकर्ता रिपोर्ट वे चलाने चाहते हैं का चयन सभी रिपोर्ट और अनुसूची के लिए आवश्यक मानकों को प्रदान करने के लिए एक फार्म का उपयोग करता है, जब वे रिपोर्ट पर चलाना चाहते हैं। एक बार जब मैंने फॉर्म को संसाधित कर लिया है तो क्या कोई तरीका या फ़ंक्शन है जिसे मैं एक शेड्यूल में run_report कार्य जोड़ने के लिए कॉल कर सकता हूं? यदि ऐसा है तो डेटाबेस में संग्रहीत सभी मौजूदा शेड्यूल पुनर्प्राप्त करने का कोई तरीका है ताकि उन्हें प्रदर्शित किया जा सके?

+0

वैकल्पिक रूप से, आप एक ही कार्य निर्धारित कर सकते हैं जो बदले में अगले शेड्यूल करता है, और इसी तरह ... – DanJ

+0

क्या होता है यदि कोई आंतरिक फ़ंक्शन बनाया जाता है और गतिशील रूप से बनाए गए 'crontab' ऑब्जेक्ट के साथ '@ periodic_task' सजावट लागू किया जाता है? मुझे एक ही समस्या है, शायद यह मदद करेगा? –

+0

मुझे एक ही समस्या है। किसी भी इंफोस ने इसे कैसे हल किया है? – Jannis

उत्तर

1

तक व्यवस्थापक इंटरफ़ेस में djcelery पर एक नज़र: http://localhost:8000/admin/djcelery/

(crontabs/अंतराल/आवधिक कार्यों का प्रयोग करके) यदि आप आवश्यक कार्य-सेटअप वहाँ निर्माण कर सकते हैं की कोशिश करो हाँ वहाँ एक बड़ा मौका है कि आप इस जल्दी से बन सकती है ..

0

मॉडल में विधि बचाने अपने ओवरराइड। जब भी उपयोगकर्ता एक प्रक्रिया/कार्य शुरू करना पसंद करता है, तो वह उस मॉडल को संशोधित करेगा जो कार्य को शुरू करने के लिए ट्रिगर करता है।

your_app/models.py:

class My_Model(models.Model): 
customer = models.ForeignKey(User, related_name='original_customer_id') 
start_task = models.BooleanField(default=False, blank=True) 

def save(self, *args, **kwargs): 
    super(NewProject, self).save(*args, **kwargs) 
    from .tasks import my_task 
    my_task.apply_async(args=[self.pk, self.status, self.file_type],) 

your_app/tasks.py

@celery.task() 
def my_task(foo, bar): 
    #do something 
1

http://celery.readthedocs.org/en/latest/userguide/calling.html

जैसे: -

from celery import task 

@task.task(ignore_result=True) 
def T(message=None): 
    print message 

T.apply_async(countdown=10, message="hi") 

अब से 10 सेकंड निष्पादित करता है।

T.apply_async(eta=now + timedelta(seconds=10),message="hi") 

अब से 10 सेकंड के कार्यान्वित करता है, ईटा

T.apply_async(countdown=60, expires=120,message="hi") 

अब से एक मिनट में कार्यान्वित का उपयोग कर specifed, लेकिन 2 मिनट के बाद समाप्त हो रहा है।

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