我自己已经在互联网上搜索过这样的答案。
这是我发现的:
豆茎
我认为 Beantalkd 中最简单的方法是利用其延迟作业的能力(给它几秒钟的延迟作为参数)。
然后,您可以进行日期数学以捕获now()
理想运行作业之间的时间差(以秒为单位),并将作业延迟那么长时间。
这是一个示例(请参阅该 SO 问题的第一个答案 - 它在 Python 中,但您可以了解该人所说/所做的要点)
请注意,这并不能保证任务按时运行 - 延迟只会使作业在 X 秒后可用。当延迟的作业变得可用时,您的队列在处理任务时的落后程度决定了作业何时实际运行。(如果由于工作量大而导致队列落后,那么它不一定会准时运行!)
拉拉维尔
Laravel 的 Queue 有一个后来的方法,你可以用它来代替push
与 Push 一样,您可以:
Queue::push('Some\Processing\Class', array('data' => $data));
,later()
你会这样做:
$delay = 14400; // 4 hours in seconds
Queue::later($delay, 'Some\Processing\Class', array('data' => $data));
SaaS 选项
- Google App Engine可以安排任务
- Iron.io可以安排任务(与 Laravel 配合得很好!)
其他语言
- Python 的Celery具有类似的延迟作业选项(具有相同的警告)
- Ruby 的 resque 有一个时间表也很适合这个