這里寫(xiě)問(wèn)題描述
<?php
namespace crontab;
use Workerman\Crontab\Crontab;
class Test
{
public function onWorkerStart()
{
//CrontabA
new Crontab('*/1 * * * * *', function () {
echo date('Y-m-d H:i:s')."-1\n";
});
//CrontabB
new Crontab('0 */1 * * * *', function () {
echo date('Y-m-d H:i:s')."-5\n";
sleep(5);
});
}
}
不知道是不是我理解得有問(wèn)題 手冊(cè)上講是阻塞的
按這個(gè)理解 應(yīng)該是 CrontabA執(zhí)行一次 CrontabB執(zhí)行一次 阻塞5秒 然后執(zhí)行CrontabA
輸出應(yīng)該是
XXXX-XX-XX XX:XX:00-1
XXXX-XX-XX XX:XX:00-5
XXXX-XX-XX XX:XX:05-1
XXXX-XX-XX XX:XX:06-1
XXXX-XX-XX XX:XX:07-1
XXXX-XX-XX XX:XX:08-1
....
但是我執(zhí)行起來(lái)發(fā)現(xiàn)輸出是
XXXX-XX-XX XX:XX:00-1
XXXX-XX-XX XX:XX:00-5
XXXX-XX-XX XX:XX:05-1 //
XXXX-XX-XX XX:XX:05-1 // 這幾個(gè)是
XXXX-XX-XX XX:XX:05-1 // 一下輸出
XXXX-XX-XX XX:XX:05-1 // 5次的
XXXX-XX-XX XX:XX:05-1 //
XXXX-XX-XX XX:XX:06-1
XXXX-XX-XX XX:XX:07-1
XXXX-XX-XX XX:XX:08-1
....
是我理解不對(duì)嗎
是的,你理解不對(duì)
注意
定時(shí)任務(wù)不會(huì)馬上執(zhí)行,所有定時(shí)任務(wù)進(jìn)入下一分鐘才會(huì)開(kāi)始計(jì)時(shí)執(zhí)行。
與workerman定時(shí)器一樣,任務(wù)全部在當(dāng)前進(jìn)程執(zhí)行,如果任務(wù)沒(méi)執(zhí)行完到了下個(gè)執(zhí)行周期則會(huì)等待當(dāng)前任務(wù)執(zhí)行完,新任務(wù)執(zhí)行會(huì)延后。
<?php
namespace crontab;
use Workerman\Crontab\Crontab;
class Test
{
public function onWorkerStart()
{
//CrontabA
new Crontab('*/1 * * * * *', function () { // 每秒鐘執(zhí)行一次
echo date('Y-m-d H:i:s')."-1\n";
});
//CrontabB
new Crontab('0 */1 * * * *', function () { // 每分鐘第 0 秒 執(zhí)行一次
echo date('Y-m-d H:i:s')."-5\n";
sleep(5); // 此處會(huì)阻塞進(jìn)程 5 秒鐘,相當(dāng)于執(zhí)行 CrontabB 時(shí),整個(gè)進(jìn)程都在等著 CrontabB 執(zhí)行完畢,CrontabA 會(huì)一直延后,累積 5 次后,CrontabB 執(zhí)行完畢的瞬間執(zhí)行 5 次被延后的 CrontabA
});
}
}