Skipping recall function from a script php

Пропуск повторного вызова функции из скрипта php.
session_id('cron'); //используем именованную сессию, имя файла сессии sess_cron
session_start();
if ($this->session->has(__METHOD__)) {
	$attemptCount = intval($this->session->get('attemptCount-' . __METHOD__));
	$this->session->set('attemptCount-' . __METHOD__, ++$attemptCount);
	printf("Run at: %s\r\n", date('c', intval($this->session->get(__METHOD__))));
	return;
} else {
	$this->session->set(__METHOD__, $_SERVER["REQUEST_TIME_FLOAT"]);
	$this->session->set('attemptCount-' . __METHOD__, 1);
	session_write_close(); // закроем сессию, снимем с нее блокировку иначе следующие скрипты не смогут ничего прочитать и будут ждать в очереди, а нам нужен другой эффект
}

sleep(300); //тут что-то делаем

//снимаем блокировку
session_id('cron');
session_start();
$this->session->remove(__METHOD__);
Безымянный91
если хотим аналог мьютекса, то достаточно только session_id(‘cron’) и все, все скрипты в очереди на ожидание ресурса — файла сессии

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *