首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个作业之间进行延迟?

如何在两个作业之间进行延迟?
EN

Stack Overflow用户
提问于 2019-02-07 23:22:53
回答 2查看 1.6K关注 0票数 2

我已经使用了laravel作业,我试着用延迟来分派两个作业,但都不起作用。

我的想法是调度x个作业,它们之间有延迟。

等待10秒调度->作业%1

等待10秒调度->作业2

等待10秒调度->作业3

以此类推。

代码语言:javascript
复制
artisan queue:work --tries=1  --queue=generate-xml
代码语言:javascript
复制
generateXML::dispatch($this->account)
                    ->onQueue('generate-xml')
                    ->delay(Carbon::now()->addSeconds(10));
EN

回答 2

Stack Overflow用户

发布于 2019-02-08 00:05:57

这听起来像是想在提交作业之间暂停您的主进程,或者您想错开作业本身的延迟。

如果你真的需要暂停10秒钟,那么你可以使用sleep(10)

如果您想在两个作业之间强制执行大约10秒的等待,那么您应该在第一个作业中增加10秒的延迟,在第二个作业中增加20秒的延迟,在第三个作业中增加30秒的延迟,依此类推。

票数 2
EN

Stack Overflow用户

发布于 2019-02-08 01:07:04

我猜下面的代码是在一个循环中完成的:

代码语言:javascript
复制
generateXML::dispatch($this->account)
                ->onQueue('generate-xml')
                ->delay(Carbon::now()->addSeconds(10));

对吗?如果是这种情况,delay()方法只会从您将作业排队时起延迟作业的执行,因此,如果您现在排队了10个作业,并且希望每10秒执行一次,则需要在循环中调用每个分派时将延迟递增10秒。

或者,您也可以在第一个作业结束时调度一个新作业,然后将下一个作业排入队列,新的延迟也为10秒。

请记住,虽然有些队列(如亚马逊的)不允许无限延迟,但对您可以在队列中保留项目的时间进行了限制……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54576606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档