php async异步,教你使用spatie/async库来写异步的PHP代码,

教你使用spatie/async库来写异步的PHP代码教你用spatie/async库写异步PHP代码,推荐:《PHP视频教程》

对于大多数用PHP编写的程序来说,它唯一的目的是执行一个由多个任务组成的简单过程,其中任务必须按顺序执行,比如数据处理。我们总是要忍受同步编程的停止和等待。代码执行的同步方式叫阻塞,就是一个一个的执行任务。所以,如果我们想在不阻塞彼此的情况下运行任务,这意味着我们需要一个非阻塞的过程,那么怎么办?呢?这个方法需要在PHP中应用异步编程方法,这里的任务将在不相互依赖的情况下执行。

在PHP中实现非阻塞执行的一种常见方式是实现队列处理。任务持久存储在MySQL、Redis、Amazon SQS等传输系统中,由后台工作人员检索并相应执行,从而不阻塞创建任务的主要过程。Laravel应用程序提供了一种排队机制,允许任务(在本例中称为作业)推迟到稍后的时间进行处理。

另一种方法是并行运行所有定义的任务。我们从这个方法中知道的是,特定任务完成后,它可以立即将控制权返回给主进程,并承诺执行代码,稍后通知我们结果(比如回调)。人们可能很少看到并行处理方法的用例;一个示例用例可能是执行图像处理并向某个外部服务发送GET请求。

让我们通过一个非常简单的用例来看看PHP中同步和异步(并行)流程之间的区别。

同步代码

foreach(范围(1,5)为$i) {

$ output=$ I * 2;

echo $输出。\ n ‘;

}异步代码

使用Spatie \ Async \ Pool

$ pool=pool : create();

foreach(范围(1,5)为$i) {

$ pool[]=async(function())use($ I){

$ output=$ I * 2;

返回$ output

})-然后(function (int $output) {

echo $输出。\ n ‘;

});

{}

wait($ pool);当我们执行第一个代码时,我们将按以下顺序获得输出值:

2

10,我们会得到和上面一样的输出顺序。因此,每次乘法运算都必须等待执行,才能进行下一次乘法运算。接下来,运行第二个代码块,看看我们得到了什么。

10

2

4第二次重试执行:

2

10

8一个过程产生两种不同的结果。这正是我们用异步方法得到的。我们的小任务可以以非阻塞的方式执行。每个乘法任务都是独立执行的,有些执行的速度比其他的快,所以输出结果是无序的。此外,请注意,我们的异步函数被附加为一个负责检索控件的then方法,它接受一个回调函数作为其参数,现在可以对接收到的输出执行额外的操作。

Spatie的工作人员开发了这个优秀的space/async包,有助于并行执行任务。您可以通过Composer安装该软件包:

Composer require spatie/async该包提供了一种与创建的任务进行交互的聪明方法,这些任务将并行执行。任务的事件侦听器描述如下:

任务完成后,操作会再次执行,因为回调可以通过它的then方法实现。当特定任务使用catch方法引发异常时,错误处理更容易控制。当一个任务没有完成它的操作时,超时方法允许人们处理这样的场景。事件侦听器链接到以下任务:

$pool

-add(function () {

//并行执行的任务

})

-然后(function ($output) {

//如果成功,您传递给队列的进程或回调函数将返回`$output`。

})

-catch(function ($exception) {

//当进程中抛出异常时,会被捕获并传递到这里。

})

-timeout(function () {

//哦不!一个过程需要太长时间才能完成。让我们做点什么

})

;要了解关于这个spacee/async包的更多信息,请阅读这篇文章的作者之一,你也可以参考GitHub资源库。

原地址:https://dev.to/webong/using-asynchronous-processes-in-php-7io

翻译地址:https://learnku.com/php/t/51334

以上是教你使用spatie/async库编写异步php代码的详细内容。请多关注其他关于雷伊PHP知识的相关文章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值