Создание фонового процесса в Yii2
Создание фонового процесса в Yii2
Всем привет.
Задался вопросом о том, как можно создать фоновый процесс в yii.
Есть задача: при определенных действиях пользователя необходимо создать отдельный фоновый процесс, который будет выполнять различные действия по данным, переданным пользователем. Эти процессы обновляют информацию о своем состоянии в БД, и пользователь видит их состояние независимо от самого скрипта.
Таких процессов может быть много.
Как такое правильнее всего реализовать?
Не увидел в yii подобных функций
Спасибо
Задался вопросом о том, как можно создать фоновый процесс в yii.
Есть задача: при определенных действиях пользователя необходимо создать отдельный фоновый процесс, который будет выполнять различные действия по данным, переданным пользователем. Эти процессы обновляют информацию о своем состоянии в БД, и пользователь видит их состояние независимо от самого скрипта.
Таких процессов может быть много.
Как такое правильнее всего реализовать?
Не увидел в yii подобных функций
Спасибо
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Создание фонового процесса в Yii2
Нравится Yii? Давайте сделаем его лучше!.
Re: Создание фонового процесса в Yii2
Большое спасибо, буду разбираться
Re: Создание фонового процесса в Yii2
Не совсем понятно, где размещать класс с задачами на процесс ?
И есть ли какой-то готовый пример ?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Создание фонового процесса в Yii2
Где удобно, там и размещайте.
Нравится Yii? Давайте сделаем его лучше!.
Re: Создание фонового процесса в Yii2
Я так понимаю, принцип работы основан на запуске одного или нескольких воркеров, которые постоянно отслеживают очередь через драйвер (в моем случае, в БД), и, если в БД появляется новая запись, то воркер запускает этот процесс в работу, верно ?
Настроил всё по документации, однако:
Код: Выделить всё
yii-queue@1.service - Yii Queue Worker 1
Loaded: loaded (/etc/systemd/system/yii-queue@.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2020-06-15 13:54:06 MSK; 1min 23s ago
Process: 5259 ExecStart=/usr/bin/php /var/www/oleg/data/www/hm.ru/basic/yii queue/listen --verbose (code=exited, status=1/FAILURE)
Main PID: 5259 (code=exited, status=1/FAILURE)
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Main process exited, code=exited, status=1/FAILURE
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Failed with result 'exit-code'.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Service RestartSec=100ms expired, scheduling restart.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Scheduled restart job, restart counter is at 5.
Jun 15 13:54:06 tg-mailer.com systemd[1]: Stopped Yii Queue Worker 1.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Start request repeated too quickly.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Failed with result 'exit-code'.
Jun 15 13:54:06 tg-mailer.com systemd[1]: Failed to start Yii Queue Worker 1.
Запуск из папки с проектом через yii результата не дает - неизвестная функция
Re: Создание фонового процесса в Yii2
Добавил конфиг queue в файл консольных настроек
Запускаю через
Ответ один:
Заранее извиняюсь, если чего не понимаю
Запускаю через
Код: Выделить всё
php yii queue/run
Код: Выделить всё
Unknown command: queue/run
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Создание фонового процесса в Yii2
Примерно так, да.Я так понимаю, принцип работы основан на запуске одного или нескольких воркеров, которые постоянно отслеживают очередь через драйвер (в моем случае, в БД), и, если в БД появляется новая запись, то воркер запускает этот процесс в работу, верно ?
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Создание фонового процесса в Yii2
В бутстрап добавили всё? https://github.com/yiisoft/yii2-queue/b ... figuration
Нравится Yii? Давайте сделаем его лучше!.
Re: Создание фонового процесса в Yii2
Порядок, спасибоsamdark писал(а): ↑2020.06.15, 14:10 В бутстрап добавили всё? https://github.com/yiisoft/yii2-queue/b ... figuration
Re: Создание фонового процесса в Yii2
Всё отладил, большое спасибо.samdark писал(а): ↑2020.06.15, 14:10 В бутстрап добавили всё? https://github.com/yiisoft/yii2-queue/b ... figuration
Только вот пришёл ещё один вопрос на ум - можно ли установить некоторый лимит задач, выполняемых одновременно ?
То бишь, сейчас выполняется одна задача, дальше берется следующая из очереди.
Нельзя ли как-то сделать так, чтобы одновременно выполнялось, например, три задачи, а уже четвертая кидалась в очередь ?
Спасибо
Re: Создание фонового процесса в Yii2
То есть, нужен отдельный воркер ?
Re: Создание фонового процесса в Yii2
Зависит от того, хотите вы раздельные очереди, или одну, но с несколькими обработчиками.
Вот пример конфига супервизора для одной очереди
Код: Выделить всё
[program:worker_notify]
process_name=%(program_name)s_%(process_num)02d
command=......../myapp/yii qunotify/listen
autostart=true
autorestart=true
user=www-data
numprocs=4
redirect_stderr=false
stdout_logfile=NONE
То есть одновременно будут обрабатываться 4 джоба
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.