【问题标题】:Call celery task from signal从信号调用芹菜任务
【发布时间】:2016-07-21 15:54:43
【问题描述】:

我需要在用户注册后从多个公共 API 导入数据。 django-allauth 包含在内,我已经注册了一个信号处理程序,以便在 allaut 发出 user_signed_up 后调用正确的方法。 因为数据导入需要很多时间,并且请求被信号阻塞,所以我想使用 celery 来完成工作。

我的测试任务:

@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 数据库,但在生产中将使用 redis

【问题讨论】:

    标签: django celery cookiecutter-django


    【解决方案1】:

    解决方案是在 local.py 中将CELERY_ALWAYS_EAGER = True 切换为False。我在 cookiecutter-django 的 Gitter 频道中被指出了该解决方案。

    上面提到的调用已经正确。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2019-12-17
      • 2015-09-25
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多