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