Пример асинхронного PHP

Пример асинхронного кода на php с созданием дочернего процесса
из родительского.

<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

function async_task($data, $callback) {

    $pid = pcntl_fork();
    
    if ($pid == -1) {
        die("Невозможно создать процесс");
    } else if ($pid) {
        // Родительский процесс, просто выходим из него
        return;
    } else {
        // Дочерний процесс
        // Выполнение асинхронной задачи 
        // Поспим 5 сек и например, запишем 
        // что-нибудь в файл
        $result = function($data){
        	sleep(5);
        	$count = file_get_contents('db.txt');
			file_put_contents('db.txt', ++$count);
			return $count;
        };
        
        // Вызываем обратный вызов для передачи результата
        call_user_func($callback, $result);
        // Завершаем дочерний процесс
        exit();
    }
}

$data = 1;
// Пример использования
async_task($data, function($result) {
    echo "Результат: " . $result;
});

echo "Здесь, делаем что-то ещё";


Функция async_task выполняется асинхронно.
Код ниже (вызова функции async_task) будет выполнен не дожидаясь пока выполнится функция async_task. Скачайте пример этого кода и запустите у себя чтобы проверить работу (скачать пример) в результате в файле db.txt после запуска этого скрипта, через 5 секунд,

Loading

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

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