<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def insert_many(self, rows, chunk_size=1000, ensure=None, types=None):
 """Add many rows at a time. This is significantly faster than adding them one by one. Per default the rows are processed in chunks of 1000 per commit, unless you specify a different ``chunk_size``. See :py:meth:`insert() <dataset.Table.insert>` for details on the other parameters. :: rows = [dict(name='Dolly')] * 10000 table.insert_many(rows) """

        chunk = []
        for row in rows:
            row = self._sync_columns(row, ensure, types=types)
            chunk.append(row)
            if len(chunk) == chunk_size:
                chunk = pad_chunk_columns(chunk)
                self.table.insert().execute(chunk)
                chunk = []

        if len(chunk):
            chunk = pad_chunk_columns(chunk)
            self.table.insert().execute(chunk)