class Bgtask_Abstract (Фоновые задачи)
Класс Bgtask_Abstract - абстрактный класс для реализации фоновых заданий.
abstract class Bgtask_Abstract
{
/** Сигналы*/const SIGNAL_SLEEP = 1;
const SIGNAL_CONTINUE = 2;
const SIGNAL_STOP = 3;
/** Статусы*/const STATUS_UNDEFINED = 0;
const STATUS_RUN = 1;
const STATUS_SLEEP = 2;
const STATUS_STOPED = 3;
const STATUS_FINISHED = 4;
const STATUS_ERROR = 5;
/*** Конструктор, принимает настройки задачи * @param array $config */public function __construct(array $config)
/** * Получить описание задачи, абстрактный* метод, логику необходимо реализовать в классе* своей задачи, возdращает строку описания, например: «Пересчет статистики» * @return string */abstract public function getDescription();
/** * Уничтожить процесс */public function terminate()
/** * Завершить задачу, при этом обновляется статистика задачи,* выставляется статус «finish» */public function finish()
/** * Остановить выполнение задачи с ошибкой * @param string $message - optional */public function error($message = '')
/** * Записать сообщение в лог задачи * @param string $message */public function log($message)
/** * Остановить выполнение задачи */public function stop()
/** * Обновить статистику задачи, выполняется* для отправки информации о процессе выполнения задачи * @return void */public function updateState()
/** * Обработать поступившие сигналы,* запускает обработку сигналов или их ожидание */public function processSignals()
/*** Выполнить задачу, абстрактный метод* для описания самой задачи*/abstract public function run();
/** * Установить адаптер интерфейса логирования * @param Bgtask_Log $logger * @return void */public function setLogger(Bgtask_Log $logger)
/** * Установить к-во ожидаемых операций (счетчик всего) * @param integer $count */public function setTotalCount($count)
/** * Установить к-во завершенных операций * @param integer $count */public function setCompletedCount($count)
/** * Увеличить число завершенных операций * @param integer $count — optional, default = 1 */public function incrementCompleted($count = 1)
}
Пример простейшей задачи:
Цикл из 1000 итераций, каждая из которых длится 1 секунду.
class Task_Test extends Bgtask_Abstract
{ /**
* (non-PHPdoc)
* @see Bgtask_Abstract::getDescription()
*/
public function getDescription()
{
return 'Test task 1000 slow operations';
}
/**
* (non-PHPdoc)
* @see Bgtask_Abstract::run()
*/
public function run()
{
$this->setTotalCount(1000);
for($i=0;$i<1000;$i++){
sleep(1);
$this->incrementCompleted();
$this->updateState();
$this->processSignals();
}
$this->finish();
}
}
comments powered by Disqus