这里写描述
我通过Timer::add定时拉取数据库数据然后创建新的定时任务new Crontab最后发现创建了很多重复的定时任务
Timer::add(1, function() use ($mqtt) {
$res = Db::table("smart_timeTask")->select();
/这里省略了部分无关的代码/
for ($a=0; $a < count($weekend); $a++) {
new Crontab("$time[1] $time[0] $weekend[$a]", function() use ($mqtt,$command){
$mqtt->publish('DO',$this->str2hex($this->$command),array("qos"=>2));
echo $this->$command."\n";
});
}
})
//通过$res的结果集数据循环创建定时任务
这里写期待结果及实际结果
我希望数据库的数据有更新同时,之前创建的定时任务也会更新----而且定时轮询数据库中的数据,从而实现更新定时任务、不创建重复的定时任务
这里写具体的系统环境相关信息
centos7 php7.4 workerman最细版本
mark
啥意思,可以说的详细一点吗
可以先调用接口:Crontab::destroy()销毁定时器,再重装创建。
试过,但是容易错过刚创建的定时器。比如一次循环结束就销毁,如果下一秒刚好是之前创建的定时任务就会错过
创建一个任务池,在循环的时候,先判断池里有没有这个任务,有就先销毁,再创建,没有就直接创建。不是循环创建任务后就直接销毁。
怎么搞任务池可以发一下示例代码吗
可以用一个数组来储存创建的任务
你说的这个我之前试过,可以怎么区分判断定时任务呢,总得有个标记吧