Как я могу получить доступ к результату асинхронной задачи в 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))