Python诅咒,在不同的连续颜色上缓慢刷新



使用python->curses模块,我遇到了一个非常慢的如果我经常更改字符串的颜色,则绘制/刷新。我用C++编写了同样的程序,没有任何问题。代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import curses
import locale
# Inint global console config
locale.setlocale(locale.LC_ALL, '')

def main(stdscr):
    curses.start_color()
    curses.use_default_colors()
    curses.init_pair(1, curses.COLOR_YELLOW, 0)
    curses.init_pair(2, curses.COLOR_RED, 0)
    max_rows, max_cols = stdscr.getmaxyx()
    max_cont = max_rows * max_cols
    try:
        for i in range(1, max_cont):
            stdscr.addstr('█', curses.color_pair(i % 2 + 1))
    except curses.ERR:
        pass
    stdscr.refresh()
    stdscr.getch()
curses.wrapper(main)

它很慢,因为程序会发送一个转义序列来更改屏幕上每个单元格的颜色。

也就是说,它不只是发送'█'(一个3字节的UTF-8字符串),而是另外发送颜色信息。以可读的形式(使用unmap),类似于以下内容:

E[31m
E[40m342226210
E[33m
E[40m342226210
E[31m
E[40m342226210
...

因为curses为每个单元格同时写入前景和背景颜色(因为少数终端无法独立完成)。转义序列为10个字节,数据为3个字节,使其速度慢了约4倍。

最新更新