Почему мой основной модуль PyGame такой медленный? - PullRequest
3 голосов
/ 27 мая 2011

Я планировал написать код в Pygame, и я только начинал с основ, и обнаружил, что выполнение кода было очень медленным. Когда я нажимаю клавишу, ей требуется некоторое время, чтобы распечатать ее в терминале (похоже, для нее нет какого-либо шаблона).

Я использую Python 2.6, я столкнулся с этой проблемой. При дальнейшем тестировании я обнаружил, что вся система замедляется . Кто-нибудь сталкивался с этим или получил решение, чтобы оно работало быстрее и / или препятствовало замедлению работы системы?

ОС - Ubuntu Аппаратное обеспечение - Macbook Pro

import pygame
import pygame.locals
pygame.mixer.init()

screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("bla")

background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill(pygame.Color("green"))
screen.blit(background, (0, 0))

looping = True
while looping:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            looping = False
        elif event.type == pygame.KEYDOWN:
            keyName = pygame.key.name(event.key)
            print "key pressed:", keyName

            if event.key == pygame.K_SPACE:
                print "Loading Music"
                pygame.mixer.music.load("born.mp3")

            elif event.key == pygame.K_ESCAPE:
                looping = False

    pygame.display.flip()

Если есть какая-либо дополнительная информация, которую я могу предоставить, я буду рад помочь. * * 1010

1 Ответ

3 голосов
/ 27 мая 2011

pyGame основан на SDL, который внутренне основан на потоках.

Когда у вас есть потоки, печатные сообщения в основном запрещены. Поскольку часто из-за срезов планировщика (которые являются большими в SDL), сообщения печати задерживаются. Дело не в том, что pygame медленна (это в некоторых ситуациях, но не в этой), просто в том, что оператор print находится в отдельном потоке событий.

Попробуйте сделать это в Pygame, оно будет работать очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...