Pool::acquire

(PHP 8.6+, True Async 1.0)

public Pool::acquire(int $timeout = 0): mixed

풀에서 리소스를 획득합니다. 사용 가능한 빈 리소스가 없고 최대 한도에 도달한 경우, 리소스가 사용 가능해질 때까지 코루틴이 차단됩니다.

풀에 빈 리소스가 있으면 즉시 반환됩니다. 빈 리소스가 없지만 max 한도에 도달하지 않은 경우 factory를 통해 새 리소스가 생성됩니다. 그렇지 않으면 리소스가 해제될 때까지 호출이 대기합니다.

매개변수

timeout
최대 대기 시간(밀리초). 0 — 무한 대기. 타임아웃이 초과되면 PoolException이 발생합니다.

반환값

풀에서 리소스를 반환합니다.

오류

다음 경우에 Async\PoolException을 발생시킵니다:

예제

예제 #1 기본 사용

<?php

use Async\Pool;

$pool = new Pool(
    factory: fn() => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
    max: 5
);

// 연결 획득 (필요시 대기)
$conn = $pool->acquire();

try {
    $stmt = $conn->prepare('SELECT * FROM users WHERE id = ?');
    $stmt->execute([42]);
    $user = $stmt->fetch();
} finally {
    $pool->release($conn);
}

예제 #2 타임아웃 사용

<?php

use Async\Pool;
use Async\PoolException;

$pool = new Pool(
    factory: fn() => new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'),
    max: 2
);

try {
    $conn = $pool->acquire(timeout: 5000); // 최대 5초 대기
    // 연결로 작업...
    $pool->release($conn);
} catch (PoolException $e) {
    echo "Failed to acquire resource: {$e->getMessage()}\n";
}

같이 보기