Creating a Batch with multiple functions
I do one batch operation but with multiple entry.

/**
 * Batch start function.
 */
function mymodule_batch_start() {
  $batch = array(
    'title' =&gt; t('Importing Excel data'),
    'operations' =&gt; array(
      array('_mymodule_import', array()),
    ),
    'progress_message' =&gt; t('Importing Excel data. Operation @current out of @total.'),
    'error_message' =&gt; t('Error!'),
    'finished' =&gt; 'mymodule_batch_finished',
  );
  // Run batch in background
  batch_set($batch);


Here is the pattern fot the operation:

/**
 * Import operation.
 */

function _mymodule_import(&amp;$context) {

  // Get your import data with some custom function.
  $import_data = _mymodule_get_import_data($context);

  // Get Count of items
  if (empty($context['sandbox']['progress'])) {
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['max'] = count($import_data);
    $context['results']['total_count'] = $context['sandbox']['max'];
  }
  // Create Iteration variable
  if (empty($context['sandbox']['iteration'])) {
    $context['sandbox']['iteration'] = 0;
  }

  // Check for the end of cycle
  if ($context['sandbox']['iteration'] &lt; $context['sandbox']['max']) {

    // Count of operation in one butch step
    $limit = 10;
    // Counts completed operations in one butch step
    $counter = 0;
    if ($context['sandbox']['progress'] != 0) {
      $context['sandbox']['iteration'] = $context['sandbox']['iteration'] + $limit;
    }

    // Main loop of all import items
    for ($i = $context['sandbox']['iteration']; $i &lt; $context['sandbox']['max'] &amp;&amp; $counter &lt; $limit; $i++) {


      // Do smth custom here with import data item $import_data[$i].
      _mymodule_handle_import_item($import_data[$i]);


      // Update Progress
      $context['sandbox']['progress']++;
      $counter++;
      // Messages
      $context['message'] = t('Item %progress of %count', array(
        '%progress' =&gt; $context['sandbox']['progress'],
        '%count' =&gt; $context['sandbox']['max'],
      ));
      $context['results']['processed'] = $context['sandbox']['progress'];
    }
  }

  if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
}


P.S. Sometines I need to import data and then remove some old data. You can store some results of 1st operation in $context and then use it in other operation. I can do import in one batch with two operations:

'operations' =&gt; array(
  array('_mymodule_import', array()),
  array('_mymodule_remove_data_after_import', array()),
),