从信号调用芹菜任务
Call celery task from signal
我需要在用户注册后从多个 public 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
解决方案是在 local.py 中将 CELERY_ALWAYS_EAGER = True
切换为 False
。我在 cookiecutter-django 的 Gitter 频道中被指出了那个解决方案。
上面提到的调用已经正确了。
我需要在用户注册后从多个 public 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
解决方案是在 local.py 中将 CELERY_ALWAYS_EAGER = True
切换为 False
。我在 cookiecutter-django 的 Gitter 频道中被指出了那个解决方案。
上面提到的调用已经正确了。