diff --git a/drupal_queue.drush.inc b/drupal_queue.drush.inc
index 09c6064..6a3a0c1 100644
--- a/drupal_queue.drush.inc
+++ b/drupal_queue.drush.inc
@@ -21,8 +21,53 @@ function drupal_queue_drush_help($section) {
  */
 function drupal_queue_drush_command() {
   $items['queue-cron'] = array(
-    'callback' => 'drupal_queue_cron_run',
+    'callback' => 'drupal_queue_drush_queue_cron',
+    'options' => array(
+      'repeat' => 'Repeat queue-cron processing n times, -1 - Until there is nothing in the queue, 0 - Forever, n - n times. Default is 1',
+    ),
     'description' => 'Run Drupal queue workers.',
   );
   return $items;
 }
+
+function drupal_queue_drush_queue_cron() {
+  $repeat = drush_get_option('repeat', 1);
+  $repeat = is_numeric($repeat) ? $repeat : 1;
+
+  $stderr = fopen('php://stderr', 'w');
+
+  switch ($repeat) {
+    case -1:
+      fwrite($stderr, "Processing Queue until empty\n");
+      while ($count = drupal_queue_cron_run()) {
+        fwrite($stderr, format_plural($count, "Processed 1 job\n", "Processed @count jobs\n"));
+      }
+      break;
+
+    case 0:
+      print "Processing Queue Forever\n";
+      while (1) {
+        $count = drupal_queue_cron_run();
+        if ($count) {
+          fwrite($stderr, format_plural($count, "Processed 1 job\n", "Processed @count jobs\n"));
+        }
+        else {
+          fwrite($stderr, "No jobs processed, sleeping\n");
+          sleep(variable_get('drupal_queue_loop_pause', 5));
+        }
+      }
+      break;
+
+    default:
+      fwrite($stderr, 'Processing Queue ' . format_plural($repeat, "1 time", "@count times") . "\n");
+      for ($i = 0; $i < $repeat; $i++) {
+        $count = drupal_queue_cron_run();
+        if ($count) {
+          fwrite($stderr, "{$i}. " . format_plural($count, "Processed 1 job\n", "Processed @count jobs\n"));
+        }
+        else {
+          sleep(variable_get('drupal_queue_loop_pause', 5));
+        }
+      }
+  }
+}
\ No newline at end of file
diff --git a/drupal_queue.module b/drupal_queue.module
index 4e08bf4..1218c7c 100644
--- a/drupal_queue.module
+++ b/drupal_queue.module
@@ -36,6 +36,8 @@ function drupal_queue_include() {
  * the queue.
  */
 function drupal_queue_cron_run() {
+  $jobs_processed = 0;
+  
   drupal_queue_include();
 
   // Try to increase the maximum execution time if it is too low.
@@ -53,10 +55,13 @@ function drupal_queue_cron_run() {
     $end = time() + (isset($info['time']) ? $info['time'] : 15);
     $queue = DrupalQueue::get($queue_name);
     while (time() < $end && ($item = $queue->claimItem())) {
+      $jobs_processed++;
       $function($item->data);
       $queue->deleteItem($item);
     }
   }
+  
+  return $jobs_processed;
 }
 
 /**
