Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何每10分钟交错循环一次_Php_Laravel_Laravel 5 - Fatal编程技术网

Php 如何每10分钟交错循环一次

Php 如何每10分钟交错循环一次,php,laravel,laravel-5,Php,Laravel,Laravel 5,问题摘要 我有一个每小时运行的命令。它循环遍历6个项目的数组,并将数据发布到twitter。问题是它一次将所有6个项目发布到twitter上。我希望循环的每个元素每10分钟交错一次。这样,twitter追随者就不会每小时收到我们的推文 我尝试过的 我做了一个不那么优雅的解决方案。只需添加sleep(600)到循环 foreach ($parks as $park) { Twitter::post(...); sleep(600); } 这很好,但我觉得有一个比让这个过程运行一小

问题摘要

我有一个每小时运行的命令。它循环遍历6个项目的数组,并将数据发布到twitter。问题是它一次将所有6个项目发布到twitter上。我希望循环的每个元素每10分钟交错一次。这样,twitter追随者就不会每小时收到我们的推文

我尝试过的

我做了一个不那么优雅的解决方案。只需添加
sleep(600)到循环

foreach ($parks as $park) {
    Twitter::post(...);
    sleep(600);
}

这很好,但我觉得有一个比让这个过程运行一小时更好的方法。

我会使用一个作业,并将其延迟排队。例如:

<?php

namespace App\Jobs;

use App\Park;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class PostToTwitter implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
    * The tweet
    *
    * @var App\Park
    */
    public $park;

    /**
    * Create a new job instance.
    *
    * @return void
    */
    public function __construct(Park $park)
    {
        $this->park = $park;
    }

    /**
    * Execute the job.
    *
    * @return void
    */
    public function handle()
    {
        // handles posting to twitter
    }
}

在这种情况下,每个作业将延迟10分钟

我会使用一个作业并将其延迟排队。例如:

<?php

namespace App\Jobs;

use App\Park;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class PostToTwitter implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
    * The tweet
    *
    * @var App\Park
    */
    public $park;

    /**
    * Create a new job instance.
    *
    * @return void
    */
    public function __construct(Park $park)
    {
        $this->park = $park;
    }

    /**
    * Execute the job.
    *
    * @return void
    */
    public function handle()
    {
        // handles posting to twitter
    }
}

在这种情况下,每个作业将延迟10分钟

如果您有一个队列系统,我建议使用而不是cronjob。您还可以有一个每小时调度一次的cronjob,用于调度其中六个调度队列作业

如果您喜欢使用当前系统,您可以使用
date('i')
获取当前的小时分钟数。然后,您可以将分钟数除以10,并将结果四舍五入到地板上。它将为数组留下一个介于0和5之间的索引:

$minutes = (int) date('i');
$index = floor($minutes / 10);

$park = $parks[$index];
有了这个逻辑,您可以简单地将当前作业安排为每十分钟运行一次,而不是每小时运行一次


注意:为了安全起见,您可能需要检查
$index
是否在数组的范围内。

如果您有队列系统,我建议使用而不是cronjob。您还可以有一个每小时调度一次的cronjob,用于调度其中六个调度队列作业

如果您喜欢使用当前系统,您可以使用
date('i')
获取当前的小时分钟数。然后,您可以将分钟数除以10,并将结果四舍五入到地板上。它将为数组留下一个介于0和5之间的索引:

$minutes = (int) date('i');
$index = floor($minutes / 10);

$park = $parks[$index];
有了这个逻辑,您可以简单地将当前作业安排为每十分钟运行一次,而不是每小时运行一次


注意:为了安全起见,您可能需要检查
$index
是否在您的数组范围内。

所以作业只需处理twitter帖子,我只需传递公园信息<代码>推特::帖子(…)这样每个推特帖子都会延迟?是的。在我的特殊情况下,延迟设置为1分钟,但您可以更改它。请记住,像SQS这样的队列的最大延迟时间为15分钟。您可能指的是
延迟(现在()->addMinutes($key*10))
,但这是一个很好的例子。@Mozammil因为他希望他的六篇文章在一个小时内分布。他不想让他们在五分钟内发布是的@fyroc,我猜他不知道你的模型叫什么。你的代码没有显示出来。所以工作只是处理推特帖子,而我只是传递公园信息<代码>推特::帖子(…)这样每个推特帖子都会延迟?是的。在我的特殊情况下,延迟设置为1分钟,但您可以更改它。请记住,像SQS这样的队列的最大延迟时间为15分钟。您可能指的是
延迟(现在()->addMinutes($key*10))
,但这是一个很好的例子。@Mozammil因为他希望他的六篇文章在一个小时内分布。他不想让他们在五分钟内发布是的@fyroc,我猜他不知道你的模型叫什么。你的代码没有显示它。