Heim > Artikel > Backend-Entwicklung > Bringen Sie Ihnen bei, die Spatie/Async-Bibliothek zum Schreiben von asynchronem PHP-Code zu verwenden
Synchroner Code
foreach (range(1, 5) as $i) { $output = $i * 2; echo $output . "\n"; }Asynchroner Code
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);Wenn wir den ersten Code ausführen, erhalten wir die Ausgabewerte in der folgenden Reihenfolge:
2 4 6 8 10Versuchen Sie die Ausführung erneut und wir erhalten die gleiche Reihenfolge wie obige Ausgabe. Daher wartet jede Multiplikationsoperation darauf, vor der nächsten Multiplikationsoperation ausgeführt zu werden. Führen Sie als Nächstes den zweiten Codeblock aus und sehen Sie, was wir erhalten.
6 10 2 8 4Zweiter Wiederholungsversuch:
2 6 4 10 8Ein Prozess führt zu zwei unterschiedlichen Ergebnissen. Genau das erhalten wir mit asynchronen Methoden. Unsere kleinen Aufgaben können blockierungsfrei ausgeführt werden. Jede Multiplikationsaufgabe wird unabhängig ausgeführt, einige schneller als andere, sodass die Ausgabe durcheinander ist. Beachten Sie außerdem, dass unsere asynchrone Funktion als then-Methode angehängt ist, die für die Rückübernahme der Kontrolle verantwortlich ist, und dass sie eine Callback-Funktion als Argument akzeptiert, die nun zusätzliche Aktionen für die empfangene Ausgabe ausführen kann. Die Leute von Spatie haben dieses nette
spacee/async
-Paket entwickelt, das bei der parallelen Ausführung von Aufgaben hilft. Sie können dieses Paket über Composer installieren:
composer require spatie/asyncDieses Paket bietet eine praktische Möglichkeit, mit erstellten Aufgaben zu interagieren, die parallel ausgeführt werden. Der Ereignis-Listener der Aufgabe wird wie folgt beschrieben:
then
implementiert werden kann. catch
-Methode eine Ausnahme auslöst, ist die Fehlerbehandlung einfacher zu kontrollieren. timeout
ermöglicht die Handhabung von Szenarien, in denen eine Aufgabe ihren Vorgang nicht abschließt. spacee/async
包,它有助于并行执行任务。你可以通过 Composer 安装该包:$pool ->add(function () { // 要在并行进程中执行的任务 }) ->then(function ($output) { // 如果成功,进程或者你传递到队列的回调函数会返回`$output`。 }) ->catch(function ($exception) { // 当进程内抛出异常时,它会被捕获并传递到这里。 }) ->timeout(function () { // 哦,不! 一个过程花了太长时间才完成。 让我们做点什么吧 }) ;
该包提供了一种巧妙的方式来与创建的任务进行交互,这些任务将被并行执行。任务的事件监听器描述如下:
then
方法来实现。catch
方法抛出异常时,错误处理更容易控制。timeout
方法允许人们处理这样的场景。事件监听器与如下所示的任务挂钩:
rrreee要了解更多关于这个spacee/async
Der Ereignis-Listener ist mit einer Aufgabe wie dieser verbunden:
Um mehr über diesesÜbersetzungsadresse: https://learnku.com/php/t/51334🎜🎜spacee/async
-Paket zu erfahren, lesen Sie unter seinen Mitwirkenden. Für diesen Artikel, Sie kann auch auf das GitHub-Repository verweisen.Originaladresse: https://dev.to/webong/using-asynchronous-processes-in-php-7io
Das obige ist der detaillierte Inhalt vonBringen Sie Ihnen bei, die Spatie/Async-Bibliothek zum Schreiben von asynchronem PHP-Code zu verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!