thenlabs/task-loop

v1.0.1 2021-10-23 21:00 UTC

This package is auto-updated.

Last update: 2024-09-07 19:30:21 UTC


README

这是一个裸任务循环的PHP实现。

如果你喜欢这个项目,请给我们一个⭐。

安装。

$ composer require thenlabs/task-loop

使用。

文件 example.php 包含以下代码,显示一旦循环开始,它将运行其所有任务。

每次循环迭代都会按照在 start() 方法中指定的间隔时间执行。

任务可以是一个 callable 或实现 ThenLabs\TaskLoop\TaskInterface 接口的对象。

<?php

require_once __DIR__.'/vendor/autoload.php';

use ThenLabs\TaskLoop\{TaskLoop, CallableTask};

define('DATE_FORMAT', 'Y-m-d H:i:s');

// create a loop instance.
$loop = new TaskLoop();

// adds the task1.
$loop->addTask(function (CallableTask $task) {
    static $counter = 10;

    echo date(DATE_FORMAT)." Task1: {$counter}\n";
    $counter--;

    if ($counter <= 0) {
        echo date(DATE_FORMAT)." Task1: End\n\n";

        // when task1 ends, the loop will be stopped.
        $task->getTaskLoop()->stop();
    }
});

// adds the task2.
$loop->addTask(function (CallableTask $task) {
    static $counter = 5;

    echo date(DATE_FORMAT)." Task2: {$counter}\n";
    $counter--;

    if ($counter <= 0) {
        echo date(DATE_FORMAT)." Task2: End\n\n";

        // when task2 ends, will be dropped from the loop.
        $task->end();
    }
});

$delay = 1000000; // value for the usleep function.
$loop->start($delay);

echo 'Good bye!';

该文件生成以下结果

2021-10-09 11:30:31 Task1: 10
2021-10-09 11:30:31 Task2: 5
2021-10-09 11:30:32 Task1: 9
2021-10-09 11:30:32 Task2: 4
2021-10-09 11:30:33 Task1: 8
2021-10-09 11:30:33 Task2: 3
2021-10-09 11:30:34 Task1: 7
2021-10-09 11:30:34 Task2: 2
2021-10-09 11:30:35 Task1: 6
2021-10-09 11:30:35 Task2: 1
2021-10-09 11:30:35 Task2: End

2021-10-09 11:30:36 Task1: 5
2021-10-09 11:30:37 Task1: 4
2021-10-09 11:30:38 Task1: 3
2021-10-09 11:30:39 Task1: 2
2021-10-09 11:30:40 Task1: 1
2021-10-09 11:30:40 Task1: End

Good bye!

开发。

运行测试。

要运行测试,执行以下命令

$ ./vendor/bin/pyramidal