首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确配置Celery以重试工作任务

正确配置Celery以重试工作任务
EN

Stack Overflow用户
提问于 2015-01-20 20:50:44
回答 1查看 2K关注 0票数 2

我有一个简单的芹菜任务,如下所示:

代码语言:javascript
复制
@app.task(bind=True)
def dumb_task(self):
    print "DUMB to sleep"
    time.sleep(10)
    print "DUMB awakes"
    self.retry(max_retries=10000, countdown=15)

在回溯任务的过程中,我在15秒内得到了一个成功的重试异常。但是当15秒过去时,不会执行任何任务。我试过太多东西了,我都快迷路了。

这是芹菜工人的日志,如果有机会知道发生了什么:

代码语言:javascript
复制
[2015-01-20 13:42:03,332: WARNING/Worker-4:2] DUMB awakes
[2015-01-20 13:42:03,347: DEBUG/Worker-4:2] Start from server, version: 0.9, properties: {u'information': u'Licensed under the MPL.  See http://www.rabbitmq.com/', u'product': u'RabbitMQ', u'copyright': u'Copyright (C) 2007-2012 VMware, Inc.', u'capabilities': {u'exchange_exchange_bindings': True, u'consumer_cancel_notify': True, u'publisher_confirms': True, u'basic.nack': True}, u'platform': u'Erlang/OTP', u'version': u'2.8.4'}, mechanisms: [u'PLAIN', u'AMQPLAIN'], locales: [u'en_US']
[2015-01-20 13:42:03,348: DEBUG/Worker-4:2] Open OK!
[2015-01-20 13:42:03,348: DEBUG/Worker-4:2] using channel_id: 1
[2015-01-20 13:42:03,349: DEBUG/Worker-4:2] Channel open
[2015-01-20 13:42:03,355: INFO/Worker-4] Task gui.tasks.dumb_task[806d7cbf5d00-4886-a715-e15fd9038b85] retry: Retry in 15s
[2015-01-20 13:42:03,356: INFO/Worker-3] Received task: gui.tasks.dumb_task[806d7cbf-5d00-4886-a715-e15fd9038b85] eta:[2015-01-20 13:42:18.334884+01:00]

以及芹菜花的回溯:

代码语言:javascript
复制
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 240, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 437, in __protected_call__
return self.run(*args, **kwargs)
File "/home/revuelta/web/piar/web/gui/tasks.py", line 59, in dumb_task
self.retry(max_retries=10000, countdown=15)
File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 680, in retry
raise ret
Retry: Retry in 15s

但是当时间过去时,不会重试任何任务。

我想问题可能出在系统和芹菜使用的时区上。

代码语言:javascript
复制
TIME_ZONE = 'Europe/Madrid'
CELERY_TIMEZONE = 'Europe/Madrid'

Debian中的date命令显示了下面的内容:

代码语言:javascript
复制
mar ene 20 13:49:25 CET 2015

与日志中的TZ相同。

任何帮助都是非常感谢的。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-01-20 21:16:05

我们正在以这种方式使用任务重述,并且工作正常:

代码语言:javascript
复制
@app.task
def fetch_followers(*args, **kwargs):
    try:
        # do some stuff here
    except RateLimitError as e:
        fetch_followers.retry(countdown=60)
        return False

注意,我们显式地使用任务名fetch_followers而不是self来执行.retry()。我不确定这是否是原因,但也许它会有所帮助。

另一种可能是,在实际执行.retry()之前,任务正在引发一些超时,这就是为什么新任务不会排队的原因。

顺便说一句,你用的是哪个经纪人?当超时到达时,您是否能够看到代理中是否有新任务在排队?

我希望它能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28045834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档