【发布时间】:2011-08-06 01:33:07
【问题描述】:
我正在使用 cron 在一天内制作一个包含 2000 个作业的脚本(意味着这是服务器端并自动执行所有作业。)
但该作业需要同时运行 10 个(或指定数量的作业)作业。
如果你看到 IDM(互联网下载管理器)有一个队列功能,它一次运行多个作业,如果有完成,它会启动另一个。我想要这样的东西..
我该怎么做?
【问题讨论】:
我正在使用 cron 在一天内制作一个包含 2000 个作业的脚本(意味着这是服务器端并自动执行所有作业。)
但该作业需要同时运行 10 个(或指定数量的作业)作业。
如果你看到 IDM(互联网下载管理器)有一个队列功能,它一次运行多个作业,如果有完成,它会启动另一个。我想要这样的东西..
我该怎么做?
【问题讨论】:
您可以继续编写自己的自定义作业队列处理程序。每个作业生成一个单独的进程,并继续在父进程中收集响应。前一个作业完成后重新开始新作业。
或者,您也可以深入研究使用Gearman(特别是如果您有多个盒子并行运行作业)。也可以在asynchronous-processing-with-php-one-worker-per-job查看这里提出的解决方案
【讨论】:
我不同意创建自己的作业队列处理程序。您将遇到出乎意料的问题,而现有项目已经遇到并处理了这些问题。
我会使用 beanstalkd 之类的东西,构建一个通用脚本来处理队列中的作业,然后生成 $x 子进程来处理它们。
【讨论】:
还有 wordpress 作业队列 - 见 http://code.trac.wordpress.org/wiki/JobsDocs(我没用过,所以不能保证)
【讨论】:
您最好编写自己的作业队列处理程序。
你可以让 php ignore_user_abort 也让它成为一个守护进程......
但在你这样做之前,请确保你对它有一定的控制权。
【讨论】: