GAE任务队列 - 有没有办法延迟任务执行X秒

时间:2010-04-02 10:28:02

标签: google-app-engine

  • 有没有办法保证在X分钟(或X分钟后)执行任务? (费率将意味着任务之间的间隔,但第一项任务是什么,第一项任务是否会在'费率'时间之后开始?)

5 个答案:

答案 0 :(得分:4)

如果您的意思是'从现在开始至少X分钟',是的 - 请使用task queue API

答案 1 :(得分:2)

在PHP中

$task = new PushTask(
    '/some/callback', 
    ['param1' => $param1, 'param2' => $param2, 'param3' => $param3],
    ['name'=>'EmailTask', 'method'=>'POST', 'delay_seconds'=>30]
);

或者更简单(默认情况下是POST)

$task = new PushTask(
    '/some/callback', 
    ['param1' => $param1, 'param2' => $param2, 'param3' => $param3],
    ['delay_seconds'=>30]
);

答案 2 :(得分:1)

Google更新了这部分api(see here)。您现在可以使用包含以下选项的PushTask发送第3个参数:

  1. 'method':string'POST','GET','HEAD','PUT','DELETE'之一。默认值:'POST'。
  2. 'name':string任务的名称。默认为“”表示服务将生成唯一的任务名称。
  3. 'delay_seconds':float执行任务之前等待的最短时间。默认值:零。
  4. 'header':string任务执行时要发送的其他标题。

答案 3 :(得分:1)

根据@Peter Recore的评论,countdown中的add()字段是“此任务应执行的未来秒数。默认为零。”

文档: https://cloud.google.com/appengine/docs/python/refdocs/google.appengine.api.taskqueue

答案 4 :(得分:0)

使用TaskQueue API

success.jsp

现在在Index1类中定义作业

public class Enqueue extends HttpServlet {
    private static final Logger log = Logger.getLogger(Enqueue.class.getName());
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String param1= request.getParameter("param1");
        String param2= request.getParameter("param2");
        String time = request.getParameter("time");
        int timer = Integer.parseInt(time) * 1000;//sec to millisec
        log.info("Executing in "+ timer+" seconds");
        // Add the task to the default queue.
        // Execute in 5 seconds
    Queue queue = QueueFactory.getDefaultQueue();
            queue.add(TaskOptions.Builder.withUrl("/index1").param("param1", param1)
                    .param("param2", param2)
                    .countdownMillis(time));

        response.sendRedirect("/");
    }
}
相关问题