python xlsxwriter constant_memory开启后内存使用并未优化

问题遇到的现象和发生背景

使用xlsxwriter写入大数据量发现内存占用大,搜索得知constant_memory参数开启可以优化内存使用。但是实际开启后未优化

问题相关代码
Write_Excle是二次封装的写xlsx的类
xlsxwriter.Workbook(filename, {'constant_memory': True})
    def write_cell(self, row, col, data, color='#ffffff'):
        format = self.Workbook.add_format()
        format.set_pattern(1)
        format.set_bg_color(color)
        self.worksheet.write(row, col, data, format)

#以下是循环写excle代码
self.write_excle = Write_Excle(result_file_name)
nrows = self.read_excle.nrows_out()  # 行数
ncols = self.read_excle.ncols_out()  # 列数
for row in range(0, nrows):
  self.write_excle.write_cell(row, 0, file_type+'[%d]' % (row+1), default_color)
  for col in range(0, ncols):
      cell_info = self.read_excle.get_cell_data(row, col)
      self.write_excle.write_cell(row, col + 1, cell_info, default_color)
问题已解决

问题原因:
是写法问题导致的内存过大。过大原因是每次调用write_cell方法都创建一个format = self.Workbook.add_format()格式,导致大量占用内存。
解决方法:
class内部创建一个format_dict用于存放使用过的单元格格式,相同的格式不重复创建,大大减少内存使用。

class Write_Excle():

    def __init__(self, filename):
        '''
        index是excle表格所在目录;
        sheet_id是要查找数据在哪个sheet表单中
        '''
        # self.index = index.decode('utf8')
        self.filename = filename
        self.Workbook = xlsxwriter.Workbook(filename, {'constant_memory': True})
        self.worksheet = self.Workbook.add_worksheet()
        self.format_dict = {}

    def write_cell(self, row, col, data, color='#ffffff'):
        if data in [('\x00', str), '\x00', ('\x00\x00', str), '\x00\x00', ]:
            data = ''
        if color != '#ffffff':
            if color not in self.format_dict:
                self.format_dict[color] = self.Workbook.add_format()
                self.format_dict[color].set_bg_color(color)
            self.worksheet.write(row, col, data, self.format_dict[color])
        else:
            self.worksheet.write(row, col, data)

    def write_row(self, row, col, data_list):
        '''写入一整行数据'''
        self.worksheet.write_row(row, col, data_list)

    def close_excle(self):
        self.Workbook.close()

一般都用csv库来写,可以试试csv库