yii2-queue асинхронное выполнение

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

yii2-queue асинхронное выполнение

Сообщение kukuruku »

по умолчанию задачи выполняются по порядку-1,2,...10
как сделать запуск чтобы задача 2 запустилась сразу после запуска задачи 1? а после запуска задачи 2 сразу запустилась задача 3?
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: yii2-queue асинхронное выполнение

Сообщение Dark Gard »

Написать свою очередь учитывающую очередность выполнения.
Как простое и быстрое решение - добавить логику сортировки
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: yii2-queue асинхронное выполнение

Сообщение Dark Gard »

Вообще yii2-queue - это пример того как реализовывать не надо.
Но это чисто мое мнение.
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: yii2-queue асинхронное выполнение

Сообщение skynin »

создать задачу контейнер
и в ней выполнять код задач

Обычная очередь рассчитана на то что задачи независимы друг от друга.
Зависимость задач - это уже бизнес логика
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: yii2-queue асинхронное выполнение

Сообщение kukuruku »

у меня нету зависимости по задачам
мне надо быстро выполнить 10000 заданий
если запускать воркер каждую минуту по крону то в час всего 60 воркеров будет работать одновременно
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: yii2-queue асинхронное выполнение

Сообщение skynin »

kukuruku писал(а): 2020.06.19, 18:38 у меня нету зависимости по задачам
мне надо быстро выполнить 10000 заданий
последовательно, одну за другой как вы написали?
значит есть зависимость.
kukuruku писал(а): 2020.06.19, 18:38 если запускать воркер каждую минуту по крону то в час всего 60 воркеров будет работать одновременно
значит нет зависимости?

а зачем по крону?
Starting Workers
Supervisor
https://github.com/yiisoft/yii2-queue/b ... /worker.md

Но если надо именно по крону, тогда
1. напишите свой запускальщик который например берет монопольную блокировку у БД. И если не может взять - заканчивает свою работу. Через минуту он опять запустится - не смог взять, значит заканчивает, потому предыдущий запуск еще не закончен
2. каждая задача при старте выполнения пытается получить блокировку и ждет, пока не получит
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: yii2-queue асинхронное выполнение

Сообщение Dark Gard »

kukuruku писал(а): 2020.06.19, 18:38 у меня нету зависимости по задачам
мне надо быстро выполнить 10000 заданий
если запускать воркер каждую минуту по крону то в час всего 60 воркеров будет работать одновременно
Есть не плохой разбор очереди с реализаций параллельного (ассинхронного) выполнения задач тут
Но и его надо доработать напильником, так как при активной работе с БД упретесь в лимит коннектов и будет что-то вроде

Код: Выделить всё

SQL server has gone away
А при 10000 заданий - обязательно упретесь, эт я гарантирую.

Еще ему по хорошему не хватает менеджера очередей. Кто-то же должен контролировать нагрузку и грамотно распределять задачи? Особенно важно это будет, если вырастите до горизонтальной / микросервисной архитектуры.

И да, это история больше не про cron, а про systemctl или supervisor, как писал выше skynin


Закончу тем, с чего начал:
Dark Gard писал(а): 2020.06.19, 17:45 Вообще yii2-queue - это пример того как реализовывать не надо.
Но это чисто мое мнение.
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: yii2-queue асинхронное выполнение

Сообщение kukuruku »

нашел более простое решение
можно запустить сразу несколько обработчиков из крона

Код: Выделить всё

* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: yii2-queue асинхронное выполнение

Сообщение skynin »

kukuruku писал(а): 2020.06.23, 15:19 нашел более простое решение
можно запустить сразу несколько обработчиков из крона

Код: Выделить всё

* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
* * * * * /app/yii queue/run
одновременно запустятся задачи 1, 2, 3, 4
в идеальном случае конечно

где в этом решении задача 2 после задачи 1
задача 3 после 2
и т.д.?
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: yii2-queue асинхронное выполнение

Сообщение kukuruku »

наверно плохо объяснил- порядок запуска не важен, 1,2,3,4 или 4,3,2,1
главное чтобы запустилась одна задача, затем не дожидаясь стартанула следующая, и т.д.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: yii2-queue асинхронное выполнение

Сообщение Loveorigami »

ну так в yii2-queue это из коробки работает.
Ответить