code: def execute_processing_block(pb_id: str, log_level='DEBUG'):
      
      init_logger('sip', show_log_origin=True, propagate=False,
                  log_level=log_level)
      LOG.info('+' * 40)
      LOG.info('+ Executing Processing block: %s!', pb_id)
      LOG.info('+' * 40)
      LOG.info('Processing Block Controller version: %s', __version__)
      LOG.info('Docker Swarm API version: %s', sip_swarm_api_version)
      LOG.info('Configuration database API version: %s', config_db_version)
  
      pb = ProcessingBlock(pb_id)
  
      LOG.info('Starting workflow %s %s', pb.workflow_id, pb.workflow_version)
  
      pb.set_status('running')
      docker = DockerSwarmClient()
  
      # Coping workflow stages to a dict
      workflow_stage_dict = {}
      for stage in pb.workflow_stages:
          workflow_stage_dict[stage.id] = deepcopy(stage.config)
          workflow_stage_dict[stage.id]['services'] = dict()
  
      # Loop until workflow stages are complete.
      while True:
          time.sleep(0.1)
  
          for workflow_stage in pb.workflow_stages:
  
              _start_workflow_stages(pb, pb_id, workflow_stage_dict,
                                     workflow_stage, docker)
  
              _update_workflow_stages(workflow_stage_dict[workflow_stage.id],
                                      workflow_stage, docker)
  
          if _abort_workflow(pb, workflow_stage_dict, docker):
              break
  
          if _workflow_complete(workflow_stage_dict):
              break
  
      pb_list = ProcessingBlockList()
      pb_list.set_complete(pb_id)
      pb.set_status('completed')
      LOG.info('-' * 40)
      LOG.info('- Destroying PBC for %s', pb_id)
      LOG.info('-' * 40)
      return pb.status
docs: Execute a processing block.
  
      Celery tasks that executes a workflow defined in a Configuration database
      Processing Block data object.
  
      Args:
          pb_id (str): The PB id for the PBC
          log_level (str): Python logging level.