如何为芹菜任务设置自定义上下文



我一直在使用Celery和Django,一切都很顺利,除了我需要重试失败的任务。

它引发异常并且永远不会再次发送任务(根据我在芹菜花中看到的内容)

这是我宣布任务的方式

# Enqueue this on "my_cool_queue", retry it no more than ten times and delay the retries by 10 seconds
@celery.task(queue='my_cool_queue', max_retries=10, default_retry_delay=10)
def task(arg1, arg2):
    try:
    # do some things with arg2 and arg2
    except suds.WebFault, fault:
        task.retry(exc=fault, args=[arg1, arg2], queue='my_cool_queue')

我正在使用此命令运行芹菜

python manage.py celeryd --concurrency=2 -B -Q my_cool_queue,cron -l INFO

我有两个队列,my_cool_queue我放置所有用户生成的任务和 cron,我有我所有计划任务的地方。

我错过了什么??

编辑:

调试一点芹菜的重试方法,我发现它没有重试任务因为它接收默认上下文,该上下文在 True 中具有"called_directly"参数

因此,此方法的前几行如下:

 # Not in worker or emulated by (apply/always_eager),
 # so just raise the original exception.
 if request.called_directly:
     maybe_reraise()  # raise orig stack if PyErr_Occurred
     raise exc or RetryTaskError('Task can be retried', None)

问题可能是"我如何以优雅的方式改变它",所以我不必直接写在任务上:

task.request.called_directly = False

提前非常感谢你。

这不应该放在首位。你的问题不是如何改变它,而是如何调用一个没有这个属性的任务。

.delay你的任务吗?你肯定没有使用渴望模式吗?

您运行的是哪个版本的芹菜?

相关内容

  • 没有找到相关文章