从信号中调用芹菜任务

时间:2016-04-01 18:14:55

标签: django celery cookiecutter-django

我需要在注册后为用户从几个公共API导入数据。包括django-allauth,我已经注册了一个信号处理程序,在allaut发出user_signed_up之后调用正确的方法。 由于数据导入需要很长时间并且请求被信号阻止,我想使用芹菜来完成工作。

我的测试任务:

@app.task()
def test_task(username):
    print('##########################Foo#################')
    sleep(40)
    print('##########################' + username + '#################')
    sleep(20)
    print('##########################Bar#################')
    return 3

我正在调用这样的任务:

from game_studies_platform.taskapp.celery import test_task

@receiver(user_signed_up)
def on_user_signed_in(sender, request, *args, **kwargs):
    test_task.apply_async('John Doe')

应将任务放入队列,并立即执行请求。但它被阻止了,我得等一下。

项目设置为https://github.com/pydanny/cookiecutter-django,我在Docker容器中运行它。 Celery被配置为在开发中使用django数据库,但将在生产中重新使用

1 个答案:

答案 0 :(得分:2)

解决方案是在local.py中将var timer = new Timer(60000, function() { console.log("shutdown"); }); // add one second of time timer.addTime(1000); // add one minute of time timer.addTime(1000 * 60); 切换为CELERY_ALWAYS_EAGER = True。我在cookiecutter-django的Gitter频道中指出了这个解决方案。

上面提到的电话已经正确。