目前业务是使用workerman中timeer定时器 每秒执行一次
但业务总是中断 不能连续执行 只能连续执行一天左右 不能长时间执行下去,
后来分析日志发现 是时间对应不上 定时器每秒写入日志时? 这个日志时间会中断几秒或几十秒执行
应该是单进程执行业务时进程阻塞的问题
想开启多进程尝试一下,可是多进程执行同一个业务方法 会并行添加多条重复业务数据 如何处理这个重复业务数据的问题?
求大神们指点一下
目前业务是使用workerman中timeer定时器 每秒执行一次
但业务总是中断 不能连续执行 只能连续执行一天左右 不能长时间执行下去,
后来分析日志发现 是时间对应不上 定时器每秒写入日志时? 这个日志时间会中断几秒或几十秒执行
应该是单进程执行业务时进程阻塞的问题
想开启多进程尝试一下,可是多进程执行同一个业务方法 会并行添加多条重复业务数据 如何处理这个重复业务数据的问题?
求大神们指点一下
15 回答8.4k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
防止并发执行属于任务调度的常见问题了。
比如 Laravel 自带了任务调度模块,或者也有单独的纯任务调度框架
task-schedule-php
。自己实现也行,其实上面两个框架也都是利用 Redis 或者其他分布式加锁方式,任务执行前先尝试获取锁,获取失败了就说明有其他任务已经在执行了。