关闭开发服务器上的Celery任务延迟

时间:2014-09-29 21:30:26

标签: python django celery

我在Heroku上使用带有RabbitMQ的Celery和以下设置:

# settings.py

DEFAULT_AMQP = "amqp://guest:guest@localhost//"
BROKER_URL = os.getenv('CLOUDAMQP_URL', DEFAULT_AMQP)
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True
CELERY_RESULT_BACKEND = False
BROKER_POOL_LIMIT = 5

# trying to clean up this memory leak
CELERYD_MAX_TASKS_PER_CHILD = 5
CELERYD_TASK_TIME_LIMIT = 60*10  # time limit in seconds--watch if we end up throwing big tasks onto this

我通常使用.delay()调用任务。

在Heroku上,我必须配置一个单独的工作人员dyno来处理这些排队的进程。对于开发服务器,我仍然希望调用我的延迟任务,但是在相同的线程中执行它而不是将其推迟到工作队列。这意味着每次我在登台服务器上调用.delay()时,我都希望不延迟任务,但实际上只是调用它,就像我使用了普通的.__call__()方法一样。

是否有Celery设置或其他方式我基本上可以关闭Celery并打电话给.delay()而不是.__call__()

1 个答案:

答案 0 :(得分:2)

为开发环境设置CELERY_ALWAYS_EAGER为True:http://celery.readthedocs.org/en/latest/configuration.html#celery-always-eager