code: def batch_persist(dfs, tables, *args, **kwargs):
          
          from .delay import Delay
  
          if 'async' in kwargs:
              kwargs['async_'] = kwargs['async']
          execute_keys = ('ui', 'async_', 'n_parallel', 'timeout', 'close_and_notify')
          execute_kw = dict((k, v) for k, v in six.iteritems(kwargs) if k in execute_keys)
          persist_kw = dict((k, v) for k, v in six.iteritems(kwargs) if k not in execute_keys)
  
          delay = Delay()
          persist_kw['delay'] = delay
  
          for df, table in izip(dfs, tables):
              if isinstance(table, tuple):
                  table, partition = table
              else:
                  partition = None
              df.persist(table, partition=partition, *args, **persist_kw)
  
          return delay.execute(**execute_kw)
docs: Persist multiple DataFrames into ODPS.
  
          :param dfs: DataFrames to persist.
          :param tables: Table names to persist to. Use (table, partition) tuple to store to a table partition.
          :param args: args for Expr.persist
          :param kwargs: kwargs for Expr.persist
  
          :Examples:
          >>> DataFrame.batch_persist([df1, df2], ['table_name1', ('table_name2', 'partition_name2')], lifecycle=1)