Sleep: примеры (PHP)
sleep(int seconds): intФункция sleep() приостанавливает выполнение скрипта на заданное количество секунд. Она принимает один обязательный аргумент — целое положительное число или ноль.
Основная область применения — создание искусственных задержек в выполнении скрипта. Это может потребоваться для ограничения частоты запросов к внешним API, симуляции длительных операций, создания временных интервалов между циклами или выполнения задач по расписанию с определенным интервалом.
- seconds (int) — количество секунд, на которое приостанавливается выполнение. В PHP 8 тип аргумента строго int. Если передано отрицательное число, будет выброшена ошибка ValueError.
Функция возвращает 0 в случае успеха или false в случае ошибки (например, если сигнал прервал задержку). На платформах Windows возвращаемое значение всегда 0.
Следующий код демонстрирует простую паузу в 2 секунды.
<?
echo 'Начало: ' . date('H:i:s') . '\n';
sleep(2);
echo 'Конец: ' . date('H:i:s') . '\n';
?>Начало: 14:30:25 Конец: 14:30:27
Передача 0 приводит к немедленному продолжению выполнения.
<?
echo 'Start\n';
sleep(0); // Фактически без задержки
echo 'Finish\n';
?>Start Finish
PHP предлагает другие функции для управления временем выполнения с более высокой точностью или для других целей.
Функция usleep() приостанавливает выполнение на заданное количество микросекунд (1 секунда = 1,000,000 микросекунд). Полезна для очень коротких задержек.
Позволяет указать задержку в секундах и наносекундах, обеспечивая максимально возможную точность.
Приостанавливает выполнение скрипта до наступления заданного временно́й метки. Удобна для планирования запуска операции в конкретный момент.
Для паузы в целых секундах достаточно sleep(). Для субсекундных задержек используют usleep() или time_nanosleep(). Для выполнения задачи в конкретное время подходит time_sleep_until().
Sleep в Python
Модуль time предоставляет функцию sleep(), которая принимает аргумент типа float (доли секунд).
import time
print("Start:", time.strftime("%H:%M:%S"))
time.sleep(1.5) # Задержка 1.5 секунды
print("End:", time.strftime("%H:%M:%S"))Start: 14:30:00 End: 14:30:01
Sleep в Javascript
В однопоточном JS нет синхронной функции задержки, блокирующей поток. Используют асинхронную функцию setTimeout() внутри async/await.
async function demo() {
console.log("Start:", new Date().toLocaleTimeString());
await new Promise(resolve => setTimeout(resolve, 2000)); // 2000 мс
console.log("End:", new Date().toLocaleTimeString());
}
demo();Start: 14:30:00 End: 14:30:02
Sleep в MySQL
Имеется функция SLEEP(), выполняющая паузу в секундах для текущего соединения.
SELECT SLEEP(3); -- Задержка 3 секунды# Возвращает 0 после 3-секундной паузы
Команда sleep приостанавливает выполнение скрипта.
echo "Start: $(date +%H:%M:%S)"
sleep 2
echo "End: $(date +%H:%M:%S)"Start: 14:30:00 End: 14:30:02
В PHP 8 это вызывает исключение ValueError.
<?
try {
sleep(-5);
} catch (ValueError $e) {
echo 'Ошибка: ' . $e->getMessage();
}
?>Ошибка: sleep(): Argument #1 ($seconds) must be greater than or equal to 0
В PHP 8 тип аргумента строго int. Передача float приведет к ошибке TypeError.
<?
try {
sleep(2.5);
} catch (TypeError $e) {
echo 'Ошибка типа: ' . $e->getMessage();
}
?>Ошибка типа: sleep(): Argument #1 ($seconds) must be of type int, float given
В веб-сценариях использование sleep() блокирует обработку всех других запросов в этом же потоке сервера. Для длительных операций предпочтительны фоновые задачи или очереди.
Функция претерпела значительные изменения. Аргумент seconds теперь имеет строгую типизацию int. Передача значения, не являющегося целым числом, вызывает TypeError. Передача отрицательного числа вызывает ValueError. В более ранних версиях отрицательные значения приводили к предупреждению и немедленному возврату без задержки.
Специфических изменений для функции sleep() не вносилось. Рекомендуется учитывать общие улучшения системы типов и обработки ошибок.
Пример скрипта, который делает последовательные запросы к внешнему API с паузой для соблюдения лимитов.
<?
$items = [100, 200, 300];
foreach ($items as $id) {
$data = file_get_contents("https://api.example.com/item/$id");
echo "Обработан ID: $id\n";
sleep(1); // Пауза 1 секунда между запросами
}
?>В CLI-скрипте можно выводить прогресс во время паузы.
<?
function longProcess($steps) {
for ($i = 1; $i <= $steps; $i++) {
echo "Шаг $i из $steps...\n";
// Имитация работы
sleep(2);
}
}
longProcess(3);
?>Шаг 1 из 3... (пауза 2 секунды) Шаг 2 из 3... (пауза 2 секунды) Шаг 3 из 3... (пауза 2 секунды)
<?
$countdown = 5;
while ($countdown > 0) {
echo "$countdown...\n";
sleep(1);
$countdown--;
}
echo "Старт!\n";
?>5... 4... 3... 2... 1... Старт!
На Unix-системах sleep() может быть прервана сигналом. Возвращаемое значение будет ненулевым (количество оставшихся секунд).
<?
$seconds = 10;
$result = sleep($seconds);
if ($result > 0) {
echo "Задержка прервана сигналом. Оставалось спать: $result секунд\n";
}
?>