AttributeError: объект 'AsyncResult' не имеет атрибута 'head'

AttributeError: объект 'AsyncResult' не имеет атрибута 'head'

В моем views.py файле ошибка возникает в data = df.head(50), когда я запускаю и получаю данные как асинхронная фоновая задача.
Может ли кто-нибудь помочь мне здесь?

task.py

@shared_task
def eda_flow_task(path, mode):
    sleep(30)
    try:
        with adls_client.open(path, mode) as f:
            df = pd.read_csv(f, low_memory=False)
        return 'data load success'
    except Exception as e:
        response_dict.update({'error': str(e)})

view.py

def eda_flow(request):
    path = '/data/satyajit/us_amz.csv'
    mode = 'rb'
    df = eda_flow_task.delay(path, mode)
    data = df.head(50)
    json_records = data.reset_index().to_json(orient ='records')
    data = []
    data = json.loads(json_records)
    context = {'data': data}
    return render(request, "home/tables-simple.html", context)

Следующее утверждение неверно: df = eda_flow_task.delay(path, mode) delay() возвращает AsyncResult, а не Pandas data-frame... Я даже не уверен, что вы можете вернуть data frame, поскольку он, вероятно, не является сериализуемым. Я, конечно, никогда не пробовал, поэтому не знаю. В случае, если это так, как я подозреваю (не сериализуемый), вы должны вернуть объект типа, который является сериализуемым, например, список объектов.

Ваша задача на самом деле возвращает строку data load success или None в случае исключения.

Для того чтобы получить результат выполнения задания Celery, необходимо сделать следующее:

res = eda_flow_task.delay(path, mode).get()  # NOTE: this blocks!

Как уже упоминалось выше, res, скорее всего, окажется жестко закодированной строкой.

Вернуться на верх