如何从django信号返回数据?

问题描述

我正在使用 Django-rest 来开发 API。就我而言,当用户发布数据时,我必须处理发布的数据(需要 2-3 分钟)。我编写了用于预处理数据的 Django 信号。我的signal.py文件看起来像这样,

@receiver(post_save,sender=ExposureIndex)
def calculate_exposure(instance,created,*args,**kwargs):
    ear_table = instance.ear_index.name
    haz_dir = instance.hazard_index.file.path

    # calling celery task
    task = exposure_calculation.delay(ear_table,haz_dir)

    return task.id

还有我的celery计算函数,

@shared_task(bind=True)
def exposure_calculation(self,ear_table,haz_dir):
    progress_recorder = ProgressRecorder(self)

    CalculateExposure(ear_table,haz_dir)

    return 'Done'

我的 django-rest 视图函数是这样的,

class ExposureIndexViewSet(viewsets.ModelViewSet):
    queryset = ExposureIndex.objects.all()
    serializer_class = ExposureIndexSerializer
    permission_classes = [permissions.IsAuthenticated]

我的问题是当用户发布数据时,我想返回 task.id 而不是返回实际响应(我试图从 Django 信号返回它,但它没有在实际 API 中返回)。任何人都可以向我建议如何在用户发布 task.id 时立即返回 exposureIndexData

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)