首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
为什么循环创建的定时器ID不连续
public function dealTimerQueue(){ $queue = new Queue(); $where = 'timer_type=4'; $list = $queue->fetchlist($where); foreach ($list as $k=>$v){ $v['space'] = $v['space'] ? $v['space'] :149; $timer_id = \Swoole\Timer::tick($v['space']*1000, function ($timer_id)use($v) { $this->send($v['controller'] , $v['method'] ,$v['param'],$timer_id); }); $queue->delete($v['id'], $timer_id); // \Swoole\Coroutine\System::sleep(0.3); // 加入队列先发第一波 $this->send($v['controller'], $v['method'], $v['param'],$timer_id); } unset($queue); } 代码如上,从数据库列表读取循环创建定时器,一次性创建上千个可能。 但定时器ID为什么不是连续的,相差9,3,4等等无规律的ID。 虽然不影响使用,但有点强迫症,希望大佬指点下。 我是放在自定义进程内运行的。程序启动自定义运行。根work_num是否有关系呢?
发布于5年前 · 1 次浏览 · 来自
提问
C
Caption
public function dealTimerQueue(){ $queue = new Queue(); $where = 'timer_type=4'; $list = $queue->fetchlist($where); foreach ($list as $k=>$v){ $v['space'] = $v['space'] ? $v['space'] :149; $timer_id = \Swoole\Timer::tick($v['space']*1000, function ($timer_id)use($v) { $this->send($v['controller'] , $v['method'] ,$v['param'],$timer_id); }); $queue->delete($v['id'], $timer_id); // \Swoole\Coroutine\System::sleep(0.3); // 加入队列先发第一波 $this->send($v['controller'], $v['method'], $v['param'],$timer_id); } unset($queue); } 代码如上,从数据库列表读取循环创建定时器,一次性创建上千个可能。 但定时器ID为什么不是连续的,相差9,3,4等等无规律的ID。 虽然不影响使用,但有点强迫症,希望大佬指点下。 我是放在自定义进程内运行的。程序启动自定义运行。根work_num是否有关系呢?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-09-24
鲁飞
提问请按模板提问,贴出对应版本信息和最简复现代码。 一个进程内应该是连续的,检查你代码里其他地方是否有相关代码。 ```php use Swoole\Process; for ($n = 1; $n <= 3; $n++) { $process = new Process(function () use ($n) { for ($i=0;$i<10;$i++) { $id = Swoole\Timer::tick(1000, function(){ echo "timeout\n"; }); var_dump($n.'-'.$id); } }); $process->start(); } Process::wait(true); ```
赞
0
回复
2020-09-24
C
Caption
/* * 队列定时加入定时器 */ public function dealTimerQueue(){ $queue = new Queue(); $where = 'timer_type=4'; $list = $queue->fetchlist($where); foreach ($list as $k=>$v){ $v['space'] = $v['space'] ? $v['space'] :149; $timer_id = \Swoole\Timer::tick($v['space']*1000, function ($timer_id)use($v) { $this->send($v['controller'] , $v['method'] ,$v['param'],$timer_id); }); $queue->delete($v['id'], $timer_id); // \Swoole\Coroutine\System::sleep(0.3); // 加入队列先发第一波 $this->send($v['controller'], $v['method'], $v['param'],$timer_id); } unset($queue); } 不是连续的,看不出来啥问题。 此处还有一种情况,就是循环创建的定时器,个别的定时器不执行。这也比较麻烦。
赞
0
回复
2020-09-24
鲁飞
回复
Caption
最简复现代码以及版本信息。
赞
0
回复