Асинхронное выполнение задач PHP [закрыт]

146
08 июля 2019, 14:30

Как сделать как на видео:

Видео вопрос

На случай если видео станет недоступно: Есть БД. В ней находятся ID групп. В каждой итерации цикл передаёт ID группы в функцию. Функция начинает выполнять разные условия, запросы, записи в БД. Это занимает N-ое количество времени. И так на каждой итерации.

Такой метод получается последовательный.

Как сделать так что бы сначала прогрузились ID групп, а потом одновременно начались выполнения функций.

Answer 1

Очень хотел снять видеоответ, но сейчас, к сожалению, такой возможности нет. Поэтому просто напишу.

Как вы, наверняка, сами заметили, у вас возникли две задачи: создание очереди и обработка задач этой очереди. Существуют различные инструменты для их решения, но я предлагаю смастерить свой велосипед, чтобы, разобравшись, как это работает сделать осознанный выбор (и возможно на этом велосипеде и поехать).

Шаг 1: Создание очереди задач на выполнение.

Используем базу данных (она уже у вас есть, ничего дополнительно устанавливать не потребуется). Добавляем туда простую таблицу с задачами с полями состояние выполнения, данные для задачи.

Теперь выбираем ID групп и для каждой создаём новую запись в таблице очереди.

Шаг 2: Разгребаем очередь по крону.

Каждые пять секунд запускаем скрипт-воркер (или несколько, с помощью xargs -P, например), который лезет в бд и выбирает одну запись из очереди и помечает её как задача в процессе выполнения. Если свободных задач в очереди нет, скрипт просто завершается. Если удалось получить задачу, скрипт начинает её выполнять (дёргать сторонние апи, что-то писать в базу, обрабатывать картинки и тд). Важно не допустить, чтобы два одновременно запущенных скрипта начали работать по одной задаче. Для этого используйте блокировки вашей бд. По завершении работы над задачей её можно пометить как выполнена или удалить.

Это решение показывает общий принцип работы таких систем. В любом случае вам нужна очередь (в данном случае таблица в бд) и демон, её разгребающий (в данном случае крон).

READ ALSO
Как дороботать цикл для колонок Bootstrap?

Как дороботать цикл для колонок Bootstrap?

Цикл для колонок Bootstrap Суть цикла такова: если пост 3 или 6 закрывать но как сделать что когда постов 5 или 4 надо также зарывать (то есть как...

137
FTP php отображение списка названия файлов

FTP php отображение списка названия файлов

пытаюсь сделать отображение файлов с FTP сервера, но при разных вариациях, примерно одно и тоже сообщение bool(false)

127
Ajax form не работает.

Ajax form не работает.

Никак не могу решить проблему, всё перепробовалНа отдельном сайте работает, а тут нет

134