gpt4 book ai didi

php - laravel 6 无法为作业队列设置延迟代码

转载 作者:行者123 更新时间:2023-12-03 06:37:53 24 4
gpt4 key购买 nike

我需要帮助来正确运行作业的延迟代码。我使用 laravel 6,现在我正在抓取 YouTube 的 View 数量。

假设我有一个充满 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));
}

}

我尝试了这段代码。但仍然无法为每个循环添加延迟 30 秒

其他人认为我在作业文件上添加了延迟代码sleep(30);。这是我在工作 app/Jobs/GetYoutubeLink.php 中所做的事情

public function handle()
{
sleep(30);
// Scraping youtube total number of views code
}

但这一样。每个循环不会延迟 30 秒。正确的延迟代码是什么。

请帮忙。在我的例子中,正确的延迟代码是什么。

最佳答案

当您调用调度时,作业就会被调度。之后您将调用延迟。您应该在分派(dispatch)之前创建作业并延迟作业。

$youtubes = Youtube::get();
$start = Carbon::now();

foreach ($youtubes as $youtube) {
$job = new GetYoutubeView($youtube->link);
$job->delay($start->addSeconds(30));

dispatch($job);
}

编辑

您之前调用多个 now 日期,您应该只创建一个日期,并不断添加 30 秒。

关于php - laravel 6 无法为作业队列设置延迟代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62234600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com