Как я могу получить доступ к результату асинхронной задачи в asyncio python, используя имя задачи?

Я хотел вычислить прогресс асинхронной задачи. Поэтому я создал еще одну асинхронную функцию "progress", которую я ожидаю от цикла for внутри исходной функции после каждой n итерации. Теперь я создал асинхронное представление django, где я хочу получить доступ к результату задачи (функция progress) с именем, которое я задал, и вернуть его как HttpResponse.

Мое представление Django

async def get_progress(request, job_id):
    task = get_the_task(name=job_id)
    return task.result

Рабочая функция, для которой я хочу рассчитать прогресс

async def working_function(request, job_id):
    for i in range(x):
        after_every_n_iterations:
            await asyncio.create_task(progress(i, x), name=job_id)
    

Это моя функция прогресса

async def progress(work_till_done, total_work):
    return work_till_done/total_work*100

Я не знаю, куда идти дальше. Пожалуйста, помогите мне.

Для использования функций async в Django вы должны использовать ASGI, но с yield вы все еще можете использовать WSGI.

Я бы использовал yield для решения этой проблемы.

def working_function(job_id):
  for i in range(x):
    yield f"<div>{job_id} has been done ({(i/x)*100})%</div><br/>"

И ваше представление должно выглядеть как

from django.http import StreamingHttpResponse

def get_progress(request, job_id):
  return StreamingHttpResponse(working_function(job_id))
Вернуться на верх