2012-07-26 23 views
30

के साथ विशिष्ट कार्य पर समय सीमा निर्धारित करना मेरे पास सेलेरी में एक कार्य है जो आमतौर पर संचालन करते समय 10,000 सेकंड तक चला सकता है। हालांकि मेरे बाकी कार्यों को एक सेकंड से भी कम समय में किया जाना चाहिए। मैं छोटे चल रहे कार्यों पर समय सीमा को बदलने के बिना जानबूझकर लंबे समय तक चलने वाले कार्य के लिए समय सीमा कैसे निर्धारित कर सकता हूं?सेलेरी

उत्तर

44

आप किसी कार्य को परिभाषित करते समय या कॉल करते समय कार्य समय सीमा (hard और/या soft) सेट कर सकते हैं।

from celery.exceptions import SoftTimeLimitExceeded 

@celery.task(time_limit=20) 
def mytask(): 
    try: 
     return do_work() 
    except SoftTimeLimitExceeded: 
     cleanup_in_a_hurry() 

या

mytask.apply_async(args=[], kwargs={}, time_limit=30, soft_time_limit=10) 
+0

ध्यान दें कि समय समाप्त/soft_timeout तर्कों को apply_async केवल अजवाइन के विकास संस्करण (मास्टर शाखा, भविष्य के संस्करण 3.1) में उपलब्ध है – asksol

+10

आप समय-सीमा निर्धारित भी कर सकते हैं कॉन्फ़िगरेशन में एक कार्य का उपयोग करके: 'CELERY_ANNOTATIONS = {'module.mytask': {'time_limit': 20.0}}' – asksol

+6

सेलेरी संस्करण 3.1.x के लिए ऐसा लगता है कि 'apply_async'' के लिए 'timeout/soft_timeout 'तर्क भी हैं बदलकर 'time_limit/soft_time_limit' में बदल गया। प्रासंगिक परिवर्तन यहां पेश किया गया था - https://github.com/celery/celery/commit/be6cef2e441e5ecf5857aeb77bd885f06128b9c9 – sanchitarora

5

यह soft_time_limit का उपयोग कर एक विशेष कार्य के लिए डेकोरेटर और अजवाइन 3.1.23 के साथ एक उदाहरण है = 10000

@task(bind=True, default_retry_delay=30, max_retries=3, soft_time_limit=10000) 
def process_task(self, task_instance): 
    """Task processing.""" 
     pass 
+0

आप 'time_limit' को '@ टास्क (soft_time_limit = 10, time_limit = 15) जैसे एक साथ असाइन भी कर सकते हैं। –

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