GAE Task Queue - есть ли способ отложить выполнение задачи на X секунд - PullRequest
9 голосов
/ 02 апреля 2010
  • Есть ли способ гарантировать выполнение задачи в течение X минут (или через X минут)? (скорость будет означать интервалы между задачами, но как насчет первой задачи, будет ли первая задача начаться после времени «оценки»?)

Ответы [ 5 ]

4 голосов
/ 02 апреля 2010

Если вы имеете в виду «хотя бы X минут», то да - используйте API очереди задач .

2 голосов
/ 13 апреля 2016

В 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]
);
1 голос
/ 09 февраля 2017

За комментарий @Peter Recore, поле countdown в add() означает «Время в секундах в будущем, которое должна выполнить эта задача. По умолчанию ноль.»

Документация: https://cloud.google.com/appengine/docs/python/refdocs/google.appengine.api.taskqueue

1 голос
/ 25 июня 2014

Google обновил эту часть своего API ( см. Здесь ). Теперь вы можете отправить третий параметр с помощью PushTask, содержащий следующие параметры:

  1. 'method': string One из 'POST', 'GET', 'HEAD', 'PUT', 'DELETE'. Значение по умолчанию: «POST».
  2. 'name': string Имя задачи. По умолчанию используется значение '', означающее, что служба генерирует уникальное имя задачи.
  3. 'delay_seconds': float Минимальное время ожидания перед выполнением задачи. По умолчанию: ноль.
  4. 'header': string Дополнительные заголовки, отправляемые при выполнении задачи.
0 голосов
/ 23 мая 2017

Использование TaskQueue API

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("/");
    }
}

Теперь определите работу в классе Index1

public class Index1 extends HttpServlet {
    private static final Logger log = Logger.getLogger(Index1.class.getName());

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        String param1= req.getParameter("param1");
        String param2= req.getParameter("param2");

            log.info("Worker processing " + param1);
/*Define job to be executed*/

    }
    }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...