동기 코드
foreach (range(1, 5) as $i) { $output = $i * 2; echo $output . "\n"; }비동기 코드
use Spatie\Async\Pool; $pool = Pool::create(); foreach (range(1, 5) as $i) { $pool[] = async(function () use ($i) { $output = $i * 2; return $output; })->then(function (int $output) { echo $output . "\n"; }); } await($pool);첫 번째 코드를 실행하면 다음 순서로 출력 값을 얻게 됩니다.
2 4 6 8 10다시 실행하면 다음과 같은 순서를 얻게 됩니다. 위의 출력. 따라서 각 곱셈 연산은 다음 곱셈 연산 이전에 실행되기를 기다립니다. 다음으로 두 번째 코드 블록을 실행하고 결과를 살펴보겠습니다.
6 10 2 8 4두 번째 재시도 실행:
2 6 4 10 8한 프로세스에서 두 가지 다른 결과가 생성됩니다. 이것이 바로 우리가 비동기식 메서드를 사용하여 얻는 결과입니다. 우리의 작은 작업은 차단되지 않는 방식으로 실행될 수 있습니다. 각 곱셈 작업은 독립적으로 실행되며 일부는 다른 작업보다 빠르므로 출력이 뒤죽박죽됩니다. 또한 비동기 함수는 제어권을 다시 가져오는 역할을 하는 then 메서드로 첨부되어 있으며 콜백 함수를 인수로 받아들여 이제 수신된 출력에 대해 추가 작업을 수행할 수 있습니다. Spatie 사람들은 작업을 병렬로 실행하는 데 도움이 되는 멋진
spacee/async
패키지를 개발했습니다. Composer를 통해 이 패키지를 설치할 수 있습니다:
composer require spatie/async이 패키지는 병렬로 실행될 생성된 작업과 상호 작용하는 깔끔한 방법을 제공합니다. 작업의 이벤트 리스너는 다음과 같습니다.
then
메서드를 통해 콜백을 구현할 수 있으므로 작업이 완료되면 작업을 다시 실행합니다. catch
메서드를 사용하면 특정 작업에서 예외가 발생할 때 오류 처리를 더 쉽게 제어할 수 있습니다. timeout
메서드를 사용하면 작업이 작업을 완료하지 못하는 경우 시나리오를 처리할 수 있습니다. spacee/async
包,它有助于并行执行任务。你可以通过 Composer 安装该包:$pool ->add(function () { // 要在并行进程中执行的任务 }) ->then(function ($output) { // 如果成功,进程或者你传递到队列的回调函数会返回`$output`。 }) ->catch(function ($exception) { // 当进程内抛出异常时,它会被捕获并传递到这里。 }) ->timeout(function () { // 哦,不! 一个过程花了太长时间才完成。 让我们做点什么吧 }) ;
该包提供了一种巧妙的方式来与创建的任务进行交互,这些任务将被并行执行。任务的事件监听器描述如下:
then
方法来实现。catch
方法抛出异常时,错误处理更容易控制。timeout
方法允许人们处理这样的场景。事件监听器与如下所示的任务挂钩:
rrreee要了解更多关于这个spacee/async
이벤트 리스너는 다음과 같은 작업에 연결됩니다:
이번역주소 : https://learnku.com/php/t/51334🎜🎜spacee/async
패키지에 대해 자세히 알아보려면 해당 패키지 기여자들의 글을 읽어보세요. GitHub 저장소를 참조할 수도 있습니다.원본주소 : https://dev.to/webong/using-asynchronous-processes-in-php-7io
위 내용은 spatie/async 라이브러리를 사용하여 비동기 PHP 코드를 작성하는 방법을 가르칩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!