Celery任务不是异步运行的

时间:2015-08-27 15:52:40

标签: python django asynchronous celery

我有表单,会上传文件,然后处理文件。由于处理文件需要很长时间,我使用芹菜。 我也用信号来触发任务。

views.py

def load_data(request):
"""Handling load data."""
if request.method == 'POST':
    form = DataLoaderForm(request.POST, files=request.FILES,
                          user=request.user)
    if form.is_valid():
        data_loader = form.save(True)

        data_loader.save()

        signals.data_uploaded_signal.send(
            sender=load_data, instance=data_loader
        )

signals.py

data_uploaded_signal = Signal()

@receiver(data_uploaded_signal)
def apply_data_loader(sender, instance, **kwargs):
    load_data.(instance)

tasks.py

from __future__ import absolute_import
from celery import shared_task
@shared_task(name='load_data')
def load_data(data_loader):
    run_process()

进程正在运行,但它只是像往常一样运行(不是异步)并阻止请求。

我知道为什么会这样吗?

我尝试过task.delay,但仍然没有运气。我也试图在没有信号的情况下调用任务,也没有运气。

感谢。

更新: 请参阅下面的评论以解决问题。

1 个答案:

答案 0 :(得分:0)

值得一提的是,当Celery设置model设置为True时,它将防止任务异步执行。但是,它对于本地调试和测试非常有用。