yii — запуск и остановка рабочих в механизаторе переполнения стека

Я успешно настроил и использовал gearman и его расширение pecl php. Я использую его для выполнения длинного процесса, касающегося длинных SQL-запросов в фоновом режиме. Я использую Yii кстати, если эта деталь помогает.

Вот как я это использую:

public function actionProcessWithGearman(){

$output = shell_exec('gnome-terminal -e "php workers/worker.php" > /dev/null 2>/dev/null &');$client = new GearmanClient();
$client->addServer();
$result = $client->doBackground('executeJob',//parameters);

}

Некоторые детали:

Если вы заметили, я бегу гном-терминал во-первых, чтобы я мог видеть процесс, а не идти прямо с команда php, Я также добавил / DEV / нуль так что больше не будет ждать ответа. И тогда рабочий просыпается и запускает работу.

Проблема:

Моя проблема возникает, когда это действие выполняется несколько раз или выполняется несколькими пользователями в разных клиентах, и, как результат, работает несколько терминалов worker.php в настоящее время создаются

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

0

Решение

Вы можете попробовать добавить returnCode () и jobStatus ().

Образец здесь — http://php.net/manual/en/gearmanclient.dobackground.php

1

Другие решения

Если у вас есть система очередей, рабочие всегда должны работать в фоновом режиме и быть готовыми к поиску новых заданий.

Я думаю, что есть недоразумение в логике системы очередей. Вы должны просто добавить новую работу, которая будет обрабатываться работником, и не запускать работника, если вы хотите, чтобы работа была выполнена.

Gearman обычно хорошо сочетается с руководителем. Супервайзер будет контролировать работника и следить за тем, чтобы он всегда был доступен. Если вам нужно одновременно запустить более одного задания, вы всегда можете добавить нового работника.

Просто посмотрите на gearman + supervisor + php, там много статей, объясняющих, как это настроить.

1

Позволить руководителю позаботиться о запуске и мониторинге php-процессов.

У этого подхода есть несколько плюсов: например, вы можете позволить супервизору автоматически запускать работников, даже если их несколько раз. И вы даже можете контролировать процессы супервизора через xmlrpc, если вы предпочитаете управлять своими работниками из собственного веб-интерфейса (http://supervisord.org/api.html)

Образец супервизора конф

[program:worker_development]
process_name=worker_%(process_num)s
command=php worker.php
directory=/var/ww/myproject
autorestart=true
user=ubuntu
redirect_stderr=false
numprocs=2
startretries=5
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector