何如做动态定时任务?

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

阅读 5.6k
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等待?

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

页面一加载就触发一个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命令执行。参考

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题