1 Востаннє редагувалося frz (27.11.2023 19:15:20)

Тема: Flask / Python - виконувати задачу на фоні

Шукаю як в Flask / Python виконувати задачу на фоні.

Поки що, коли запускаю endpoint1, апка очікує поки завершиться операція. Тобто цей та інші ендпоїнти апки стають недоступними на час виконання задачі за яку відповідає endpoint1. Це некритично у випадку з іншими ендпоїнтами, виконання яких займає секунду-дві. Але коли задача раниться декілька годин, то користувачу зовсім незрозуміло, що на бекенді все цілком успішно виконується, він хотів би бачити принаймні якесь повідомлення типу "задача раниться, приходьте пізніше"; або ж в ідеалі ще й бачити прогрес виконання.

(цілком можливо, що знайду сам відповідь і напишу про це тут, це ок, але може хтось щось підкаже)

Upd:

колега Copilot підказує

Юзати Celery або RQ (Redis Queue).

приклад використання Celery:

from celery import Celery

# Initialize Celery
celery = Celery('myapp', broker='pyamqp://guest@localhost//')

@celery.task
def long_running_task():
    # Code for your long-running task goes here
    pass

@app.route('/ep3')
def ep3():
    # Enqueue the task to be run in the background
    long_running_task.delay()
    return 'Task has been enqueued'

2

Re: Flask / Python - виконувати задачу на фоні

async+await користувати вже не модно ?

3

Re: Flask / Python - виконувати задачу на фоні

leofun01 написав:

async+await користувати вже не модно ?

Про модні штуки це до сіньйорів, чий рік народження починається на "2".

Тут інше - сама апка зараз крутиться на фреймворку Flask, котрий не є асинхронним сам по собі. Зрештою, прикрутити там async можна, але наприклад через таку приблуду як gevent.

Ще варіант - змігрувати апку на щось типу Quart, це щось типу новішого Flask тільки нативно підтримує асинхронність.

Коротше, просто так додати async не вийде.

Але рівно сидіти на задниці все одно не вдасться, бо воно зараз так як є не працює так як треба.

4

Re: Flask / Python - виконувати задачу на фоні

Підніміть окремий потік для Фласку, та й нехай там собі синхронно крутиться. Й будете перевіряти чи завдання все ще там виконується. Перевірки можна легко зробити через Condition Variables.

5 Востаннє редагувалося frz (28.11.2023 15:10:39)

Re: Flask / Python - виконувати задачу на фоні

wander написав:

Підніміть окремий потік для Фласку, та й нехай там собі синхронно крутиться. Й будете перевіряти чи завдання все ще там виконується. Перевірки можна легко зробити через Condition Variables.

А якщо потрібно більш ніж одну велику задачу ранити...

Загалом в мене апка вже має чотирьох користувачів і кожен може заранити по п'ять процесів, з яких три є довготривалими, то що - треба дванадцять-двадцять потоків для Фласку піднімати... І як це масштабувати надалі...