| 7 system.api.php | hook_cron_queue_info() |
Declare queues holding items that need to be run periodically.
While there can be only one hook_cron() process running at the same time, there can be any number of processes defined here running. Because of this, long running tasks are much better suited for this API. Items queued in hook_cron() might be processed in the same cron run if there are not many items in the queue, otherwise it might take several requests, which can be run in parallel.
Return value
An associative array where the key is the queue name and the value is again an associative array. Possible keys are:
- 'worker callback': The name of the function to call. It will be called with one argument, the item created via DrupalQueue::createItem() in hook_cron().
- 'time': (optional) How much time Drupal should spend on calling this worker in seconds. Defaults to 15.
See also
Related topics
1 function implements hook_cron_queue_info()
1 invocation of hook_cron_queue_info()
File
- modules/
system/ system.api.php, line 579 - Hooks provided by Drupal core and the System module.
Code
function hook_cron_queue_info() {
$queues['aggregator_feeds'] = array(
'worker callback' => 'aggregator_refresh',
'time' => 60,
);
return $queues;
}
Login or register to post comments
Comments
Invoked by
Invoked by includes/common.inc
Clarification
The argument of the worker callback is the data passed to DrupalQueue::createItem(), not to be confused with the queue item returned by the claimItem() method.
learn how to use these hook
I add a cron task,and let all node title add a suffix "abc",just in order to learn how to use these hook.The code can run properly.
<?php
/*
* Implements hook_cron().
*/
function hf_remind_cron(){
$result = db_query('SELECT title,nid FROM {node}');
$queue = DrupalQueue::get('send_emails');
foreach ($result as $hf_info) {
$queue->createItem($hf_info);
}
}
/*
* Implements hook_cron_queue_info().
*/
function hf_remind_cron_queue_info(){
$queues['send_emails'] = array(
'worker callback' => 'hf_sender',
'time' => 120,
);
return $queues;
}
function hf_sender($data){
$result = db_update('node')
->fields(array('title' => $data->title . 'abc'))
->condition('nid', $data->nid)
->execute();
}
?>
Queue Info Clarification & Scheduling
A number of example uses of this hook, including the above, explicitly create the queue in the hook_cron(). It's important to note that this is NOT required to process queues during cron.
If you are pre-populating your queue with items somewhere else in Drupal (for example, on node creation, user saves, or any other arbitrary action), then all that's required to process a queue on cron is to invoke hook_cron_queue_info() using the name of the queue.
Also note that if you're familiar scheduling tasks in hook_cron() using this method, you can use the same logic to return only relevant portions of the array returned in hook_cron_queue_info() to effectively schedule queue processing.
Queue items will be deleted
Be aware that after the 'worker callback' function is called, the item will be deleted from the queue whether you want it to be or not.