fer*_*and 2 php cron redis laravel
我需要帮助来正确运行作业的延迟代码。我使用 laravel 6,现在我正在抓取 youtube 的视图数量。
假设我有一个充满 YouTube 链接的表格。当我抓取 youtube 时。我们需要在转到其他链接之前添加延迟时间。如果我们不拖延的话。youtube 将阻止我们的访问。我想为每个循环添加大约 30 秒的延迟。
所以我已经在我的 app/Console/Commands/GetYoutube.php 文件中尝试过的是这个
use App\Models\Youtube;
use App\Jobs\GetYoutubeView;
use Carbon\Carbon;
...
public function handle()
{
$youtubes = Youtube::get();
foreach ($youtubes as $youtube) {
GetYoutubeView::dispatch($youtube->link)->delay(Carbon::now()->addSeconds(30));
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个代码。但仍然无法为每个循环添加延迟 30 秒
其他人认为我sleep(30);在作业文件中添加了延迟代码。这是我在工作 app/Jobs/GetYoutubeLink.php 中所做的
public function handle()
{
sleep(30);
// Scraping youtube total number of views code
}
Run Code Online (Sandbox Code Playgroud)
但这也一样。每个循环不会延迟 30 秒。正确的延迟代码是什么?
请帮忙。在我的例子中,正确的延迟代码是什么?
当您致电调度时,作业就会被调度。之后您将调用延迟。您应该在调度之前创建作业并延迟作业。
$youtubes = Youtube::get();
$start = Carbon::now();
foreach ($youtubes as $youtube) {
$job = new GetYoutubeView($youtube->link);
$job->delay($start->addSeconds(30));
dispatch($job);
}
Run Code Online (Sandbox Code Playgroud)
编辑
您之前调用多个 now 日期时,应该只创建一个日期,并不断为其添加 30 秒。
| 归档时间: |
|
| 查看次数: |
5091 次 |
| 最近记录: |