php - 何如做动态定时任务?
怪我咯
怪我咯 2017-04-10 17:33:43
[PHP讨论组]

做一个定时任务处理数据,每次处理10个,如果处理的太多就会出现问题
怎么做动态定时任务,查询待处理数据条数,如果大于10个,定时下一分钟执行,依次循环

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(7)
阿神

以前用redis+python搞过类似的东东,这个思路redis+PHP也可以做。其实很简单:

  1. 首先要有个redis服务器

  2. 假设一个任务队列就叫job_queue,类型使用list

  3. 起一个PHP脚本定时往里面加任务,比如$redis->lpush('job_queue', "xxx"); ,数据建议序列化为JSON字符串

  4. 起10个PHP脚本来执行任务,可以采用会阻塞blpop来取任务并执行:dealYourJob($redis->blpop('job_queue')); -- 注意反序列化数据

O了

至于【3】中的如何定时,既然你是用linux,建议直接用系统的crontab即可。
【4】中的脚本想并行多少个随时都可以增加或减少。

除了redis外,MySQL也可以用来搞这个队列,就是SQL语句写起来麻烦些。

redis本身是单线程的,lpushblpop都能保证原子性,比用MySQL要省心。

怪我咯

sleep等待?

ringa_lee

求大神告知怎么做或指明其他第三方

怪我咯

页面一加载就触发一个js方法,这个方法里面用ajax请求处理的那个后台方法,再用js定时器http://jun1986.iteye.com/blog...这是定时器的用法

阿神

如果单纯用PHP做,只能说PHP本身不擅长做这种事。不像JAVA在虚拟机里面开多几个线程就能解决。
如果没有接触过计划任务,可以尝试一下,linux的crontab。
另外要是根据不同的返回数量来决定不同的操作间隔,可以用计划任务+缓存来实现。

希望对你有帮助!

伊谢尔伦

用linux的crontab

0.先看看下面的链接

linux定时运行命令脚本——crontab

1.vi /etc/crontab

*/1 * * * * root php yourPhpFile.php 

2.每一分钟yourPhpFile.php脚本就会去查询并处理你的任务

总结:此处的crontab任务每一分钟执行一次,只是提供下大概思想所以不够高效,题主可以安排和设置出更为合理的定时任务

希望对你有所帮助

大家讲道理

你可以在程序里面设计好对应的规则逻辑。然后通过crontab命令执行。参考

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号