我已经建立了一个基于Laravel的系统,用户可以开始执行“任务”,该任务重复多次,每次重复之间都有延迟。我通过使用一个amount
参数对作业进行排队来完成此任务,然后将其递归地排队另外一个作业,直到计数增加为止。
例如,我以3次重复开始我的任务:
amount
参数为3排队。它运行后,数量减为2。同一作业再次排队,指定了5秒的延迟。amount
为1重复。amount
已达到0,因此不再排队,任务已完成。这按预期工作,但是我需要知道用户当前是否正在处理任何任务。我需要能够执行以下操作:
amount
设置的值。我正在将database
驱动程序用于名为tasks
的队列。这里有没有现成的方法可以实现我的目标?
谢谢!
答案 0 :(得分:0)
您不应该使用延迟来一遍又一遍地重复同一作业的多个重复。该功能适用于重试失败的网络请求之类的事情。如果计数太高,一次将多个任务排在队列中可能会导致队列出现内存问题。
我建议您使用php artisan schedule:run
功能每1-5分钟运行一次命令,以检查是否可以运行用户作业。如果是这样,请启动该作业,然后向用户表(或要跟踪这些表的任何表)添加状态标志。完成后,将同一行标记为已完成,然后等待cron下次运行时再次执行。