编程语言
首页 > 编程语言> > python – Django TimeLimitExceeded错误

python – Django TimeLimitExceeded错误

作者:互联网

今天我收到了来自Celery的错误邮件,有人可以解释一下,可能我如何解决超时问题?非常有帮助,谢谢.

PS我的消息似乎已发送尽管有这个错误,是不是也是这样?

错误:

Task Request to Process with id 65123935-b190-4718-9ed0-fb863359f27f 
 raised exception:
'TimeLimitExceeded(300.0,)'


Task was called with args: (<Batch: Batch object>,) kwargs: {}.

The contents of the full traceback was:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/billiard/pool.py", line 496, in on_hard_timeout
    raise TimeLimitExceeded(job._timeout)
TimeLimitExceeded: TimeLimitExceeded(300.0,)


--
Just to let you know,
py-celery at w1.ip-10-32-53-113.

任务:

class ProcessRequests(Task):
    name = "Request to Process"
    max_retries = 1
    default_retry_delay = 3

    def run(self, batch):
        # Only run this task on non-scheduled tasks
        if batch.status != "Scheduled":
            q = Contact.objects.filter(contact_owner=batch.user)
            if batch.group == None:
                q = q.filter(id=batch.contact_id)
            else:
                q = q.filter(group=batch.group)

            for e in q:
                msg = Message.objects.create(
                    recipient_number=e.mobile,
                    content=batch.content,
                    sender=e.contact_owner,
                    billee=batch.user,
                    sender_name=batch.sender_name
                )
                gateway = Gateway.objects.get(pk=2)
                msg.send(gateway)

解决方法:

您收到TimeLimitExceeded异常,因为您的任务执行时间超过300秒. 300秒是任务可以运行的默认时间.

正如Avichal Badaya所说,您可以配置Celery以允许更长的执行任务.

您提到您的邮件仍然已发送,但这可能发生,因为您的任务是为批处理编写的.因此,要么您尝试发送多条消息,要么您只是尝试发送一条消息,但有些消息会让批处理变得混乱.

你能告诉我们你如何称呼这项任务吗?

标签:python,django,django-celery
来源: https://codeday.me/bug/20190620/1243470.html