Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为芹菜任务设置自定义上下文_Python_Django_Heroku_Rabbitmq_Celery - Fatal编程技术网

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

Python 如何为芹菜任务设置自定义上下文,python,django,heroku,rabbitmq,celery,Python,Django,Heroku,Rabbitmq,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=

我一直在用芹菜和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
我有两个队列,一个是放置所有用户生成任务的“酷”队列,另一个是放置所有计划任务的cron队列

我错过了什么

编辑:

通过调试芹菜的重试方法,我发现它并没有重试任务 因为它接收默认上下文,其中“called_directly”参数为True

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

 # 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

非常感谢您。

首先不应该设置此选项。您的问题不是如何更改它,而是如何在没有此属性的情况下调用任务

你是否
。延迟你的任务?您肯定没有使用“急切”模式吗


你正在运行哪个版本的芹菜?

你听到了正确的异常吗?我尝试了异常、错误,得到了相同的行为:-(您似乎遇到了一个错误,名称“task”不再是当前正在运行的任务。您使用的代理是什么,在哪个平台上?开发版本(3.1版)通过引入
@app.task(bind=True)def task(self):self.retry(…)确保不再发生这种情况。)
lol,非常感谢@asksol我在Linux上使用芹菜3.0.23、rabbitmq和所有东西。是的,我使用apply_async()调用我的任务,使用芹菜3.0.23并使用默认配置,我认为默认情况下“aways eager”是错误的