Pre-loader

/ K2 Cloud ERP for Python / Програмістам / Різні задачі Python-програмістів / Відслідковування довгого процесу на сервері за допомогою Python, Flask

Відслідковування довгого процесу на сервері за допомогою Python, Flask

Для відслідковування довгого процесу на сервері та надання користувачу можливості бачити прогрес виконання, ви можете використовувати техніку, яка використовує вебсокети або HTTP-запити для передачі інформації про стан процесу. Вам також знадобиться JavaScript на стороні клієнта для оновлення інформації про прогрес.

Ось загальний опис того, як це можна реалізувати за допомогою Flask і вебсокетів за допомогою бібліотеки Flask-SocketIO:

1. Встановіть Flask-SocketIO:

Встановіть бібліотеку Flask-SocketIO, якщо ви ще цього не зробили:

pip install Flask-SocketIO

2. Створіть Flask додаток:

Створіть файл app.py та ініціалізуйте додаток Flask:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
socketio = SocketIO(app)

3. Створіть маршрути:

Створіть маршрут для відображення сторінки та маршрут для початку довгого процесу:

@app.route(`/`)
def index():
    return render_template(`index.html`)

@app.route(`/start_long_process`)
def start_long_process():
    # Початок довгого процесу
    # Отримуйте інформацію про стан процесу і відправляйте її через вебсокети
    for i in range(1, 101):
        socketio.emit(`update`, {`progress`: i}, namespace=`/test`)
        time.sleep(1)
    return `Довгий процес завершено!`

4. Створіть сторінку HTML для користувача:

Створіть файл templates/index.html:


Довгий процес


Довгий процес

5. Запустіть додаток:

Ваш додаток Flask можна запустити за допомогою socketio.run:

if __name__ == `__main__`:
    socketio.run(app, debug=True)

Цей приклад дозволить вам почати довгий процес та отримувати інформацію про прогрес у реальному часі на сторінці користувача завдяки вебсокетам.

Не забудьте налаштувати та налаштувати ваш додаток та вебсокети на продуктовому сервері перед використанням на публічних ресурсах.

Ще приклад 

Якщо у вас є довгий процес в Flask, і ви хочете передавати інформацію про його стан користувачеві, ви можете використовувати WebSocket або AJAX-запити для асинхронного оновлення сторінки. Давайте розглянемо приклад використання AJAX-запитів з бібліотекою Flask-SocketIO.

1. Встановлення Flask-SocketIO:

Встановіть бібліотеку Flask-SocketIO, якщо ви ще цього не зробили:

pip install flask-socketio

2. Створення Flask-додатка:

Створіть основний файл для вашого Flask-додатка. Ось простий приклад:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import time
import threading

app = Flask(__name__)
socketio = SocketIO(app)

@app.route(’/’)
def index():
    return render_template(’index.html’)

def long_running_task():
    for i in range(10):
        time.sleep(1)
        # Оновлення статусу процесу за допомогою SocketIO
        socketio.emit(’update_status’, {’status’: f’Step {i + 1} completed’})

@socketio.on(’start_task’)
def start_long_running_task():
    # Запуск довгого процесу в окремому потоці
    threading.Thread(target=long_running_task).start()

if __name__ == ’__main__’:
    socketio.run(app, debug=True)

3. Створення шаблону HTML:

Створіть файл templates/index.html для відображення сторінки та взаємодії зі статусом процесу:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Long Running Task</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script>
    <script>
        var socket = io.connect(’http://’ + document.domain + ’:’ + location.port);

        socket.on(’update_status’, function(data) {
            document.getElementById(’status’).innerText = data.status;
        });
    </script>
</head>
<body>
    <h1>Long Running Task</h1>
    <button onclick="startTask()">Start Task</button>
    <p id="status"></p>

    <script>
        function startTask() {
            socket.emit(’start_task’);
        }
    </script>
</body>
</html>

4. Запуск додатка:

Запустіть ваш Flask-додаток та перейдіть за адресою http://127.0.0.1:5000/ у веб-браузері.

Цей приклад використовує Flask-SocketIO для забезпечення зв'язку між сервером і клієнтом через WebSocket. Коли ви натискаєте кнопку "Start Task", сервер запускає довгий процес в окремому потоці і регулярно висилає оновлення статусу за допомогою SocketIO, яке відображається на сторінці.

Не забудьте встановити Flask-SocketIO перед запуском цього коду.

Автор: Рудюк С.А. 2023. K2 Cloud ERP.