--- job_queue.module	2009-10-04 19:39:05.000000000 -0400
+++ job_queue.module	2010-02-23 01:17:38.000000000 -0500
@@ -119,6 +119,10 @@
 
 function job_queue_cron() {
   $job_count = db_result(db_query('SELECT count(*) FROM {job_queue}'));
+  if ($max_jobs = (int)variable_get('job_queue_max_jobs', 0)) {
+    $job_count = min($job_count, $max_jobs);
+  }
+  
   $max_execution_time = ini_get('max_execution_time');
   if (empty($max_execution_time)) {
     $max_execution_time = 5 * 60;
@@ -206,6 +210,13 @@
     '#value' => '0',
   );
 
+  $form['max_jobs_per_run'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Max jobs'),
+    '#description' => t('Limit the number of functions that will be executed, even if there is enough time left. Set to 0 for no limit.'),
+    '#default_value' => variable_get('job_queue_max_jobs', 0),
+  );
+
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Save settings'),
@@ -232,6 +243,8 @@
 }
 
 function job_queue_settings_form_submit($form, &$form_state) {
+  variable_set('job_queue_max_jobs', (int)$form_state['values']['max_jobs_per_run']);
+
   foreach ($form_state['values']['priorities'] as $function => $data) {
     db_query("DELETE FROM {job_queue_functions} WHERE function = '%s'", $function);
     db_query("INSERT INTO {job_queue_functions} (function, priority) VALUES ('%s', %d)", $function, $data['priority']);
