2016-03-29 8 views
0

Mit Python-> Curses-Modul, ich erlebe eine sehr langsame zeichnen/aktualisieren, wenn ich die Zeichenfolge Farbattribut viel chache. Ich schrieb das gleiche Programm in C++ und hatte kein Problem. Code:Python Curses, langsame Aktualisierung in verschiedenen aufeinander folgenden Farben

#!/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) 

Antwort

0

Es ist langsam, weil das Programm eine Escape-Sequenz sendet auf dem Bildschirm die Farbe für jede Zelle zu ändern.

Das heißt, anstatt nur (eine 3-Byte-UTF-8-Zeichenfolge) zu senden, sendet es zusätzlich die Farbinformationen. In lesbarer Form (mit unmap), etwa so:

\E[31m 
\E[40m\342\226\210 
\E[33m 
\E[40m\342\226\210 
\E[31m 
\E[40m\342\226\210 
... 

weil Flüche sowohl die Vorder- und Hintergrundfarben für jede Zelle (da einige Terminals sie unabhängig nicht tun kann) schreibt. Das sind 10 Bytes für Escape-Sequenzen und 3 Bytes für Daten, was es ungefähr 4 mal langsamer macht.

+0

Aber warum der gleiche Code in C++ geschrieben ist sehr schnell? Und selbst wenn ich den "█" -Charakter mit zum Beispiel "A" ändere, ist es immer noch langsam. –

+0

Python ist ein Interpreter und hat mehr zu tun als eine Compiler-Anwendung in C++. –

+0

Ich denke nicht, dass die Menge der Daten, die gesendet wird, hier das Problem ist, denn wie gesagt ist langsamer nur, wenn die Farben wechseln. Wenn ich nur ein Farbpaar verwende, ist die Menge der gesendeten Daten gleich, aber es funktioniert super schnell. –

Verwandte Themen