Laravel定时任务如何避免重复执行的问题如何解决?
- 内容介绍
- 文章标签
- 相关推荐
本文共计753个文字,预计阅读时间需要4分钟。
相关专题
解决方法
大部分情况下是没有什么问题的,但是有时我们需要避免这种情况来保证获得正确的数据。在Laravel中我们可以通过withoutOverlapping方法来进行处理:
$schedule->command('mail:send')->withoutOverlapping();
Laravel会检查Console\Scheduling\Event::withoutOverlapping属性,如果该值为true那么将会针对这个任务创建一个互斥锁(mutex),并且只有在可以创建互斥锁的情况下才会执行此任务。
什么是互斥锁?
这是我在网上找到的最有趣的解释:
将尖叫鸡换成互斥锁,人换成线程。你基本上就有了一个互斥锁的基本概念。
-- https://stackoverflow.com/questions/34524/...
原理分析
Laravel在第一次执行任务的时候会创建一个互斥锁,然后在每次执行任务时会检查互斥锁是否存在,只有互斥锁不存在的时候任务才会执行。
本文共计753个文字,预计阅读时间需要4分钟。
相关专题
解决方法
大部分情况下是没有什么问题的,但是有时我们需要避免这种情况来保证获得正确的数据。在Laravel中我们可以通过withoutOverlapping方法来进行处理:
$schedule->command('mail:send')->withoutOverlapping();
Laravel会检查Console\Scheduling\Event::withoutOverlapping属性,如果该值为true那么将会针对这个任务创建一个互斥锁(mutex),并且只有在可以创建互斥锁的情况下才会执行此任务。
什么是互斥锁?
这是我在网上找到的最有趣的解释:
将尖叫鸡换成互斥锁,人换成线程。你基本上就有了一个互斥锁的基本概念。
-- https://stackoverflow.com/questions/34524/...
原理分析
Laravel在第一次执行任务的时候会创建一个互斥锁,然后在每次执行任务时会检查互斥锁是否存在,只有互斥锁不存在的时候任务才会执行。

