Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MacOS] Problème CPU 110% (pygame)

    28 novembre 2017 à 22:12:07

    Bonjour à tous ! J'ai un problème sur mon MacBook Pro 2016 (sous high sierra).

    Infos utiles : J'ai python3.6.3 installé ainsi que le module pygame1.9.3 tous les deux installés via HomeBrew et pip3. 

    Problème : J'ai codé un simple jeu en utilisant ce module. Il n'est absolument pas optimisé et demande par exemple de réafficher toute la fenêtre élément par élément à chaque tick. Cependant pour un jeu si petit cela ne pose pas problème normalement. Mais lorsque je le lance via mon terminal, celui-ci se retrouve saccadé et ram énormément... Un petit coup d'oeil à l'utilisation de mon CPU m'indique que le programme python utilise 116% de celui-ci... Un ami à moi arrive à le faire tourner de manière tout à fait fluide sur son macbook air (sensé être moins puissant que ma machine sur papier) alors que ce programme n'utilise (à peine) que 35% de son CPU...

    J'ai beau chercher je ne vois pas d'où pourrait venir le problème ! Merci d'avance ! 

    • Partager sur Facebook
    • Partager sur Twitter
      29 novembre 2017 à 8:04:47

      Salut

      C'est normal.

      Tu dois aller , ensuite, faire  dans le , pour enfin .

      Sérieusement, tu percutes pas que nous ne sommes pas devant ton ordi.

      Poste le code je te prie !

      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2017 à 16:12:58

        Pas besoin de t'énerver pour si peu ^^'

        Le code n'est visiblement pas la raison du problème puisque qu'il fonctionne très bien sur une autre machine... Je demande simplement si le problème est décrit quelque part ou connu. 

        cependant si tu le désires tant : 

        import pygame
        import random
        import time
        
        # --- constantes 
        GRIS = (127, 127, 127)
        BLANC = (255, 255, 255)
        
        FENETRE_LARGEUR = 600
        FENETRE_HAUTEUR = 800
        
        VOITURE_LARGEUR = 80
        VOITURE_HAUTEUR = 162
        
        POINTILLE_HAUTEUR = 100
        POINTILLE_LARGEUR = 10
        BAU_HAUTEUR = FENETRE_HAUTEUR
        BAU_LARGEUR = 2*POINTILLE_LARGEUR
        ESPACE = 50
        
        VERS_DROITE = 1
        VERS_GAUCHE = -1
        
        voiture_position = [FENETRE_LARGEUR/2 - VOITURE_LARGEUR/2 , FENETRE_HAUTEUR * (3/4)]
        VOITURE_DEPLACEMENT = 7
        
        decalage = 0
        
        
        # --- positions pointillés
        pp1 = [FENETRE_LARGEUR // 4 - POINTILLE_LARGEUR // 2, ESPACE]
        pp2 = [(2 * FENETRE_LARGEUR) // 4 - POINTILLE_LARGEUR // 2, ESPACE]
        pp3 = [(3 * FENETRE_LARGEUR) // 4 - BAU_LARGEUR // 2, ESPACE]
        # pp4 = [(4 * FENETRE_LARGEUR) // 5 - POINTILLE_LARGEUR // 2, ESPACE]
        
        # --- dessiner + déplacer les pointillés
        def Dessiner_pointilles(vitesse):
        
            global decalage
            
            for i in range(-1, 6):
                pygame.draw.rect(fenetre, BLANC, ((pp1[0], pp1[1] + decalage + i*(ESPACE + POINTILLE_HAUTEUR)),
                (POINTILLE_LARGEUR, POINTILLE_HAUTEUR)))
            
            for j in range(-1, 6):
                pygame.draw.rect(fenetre, BLANC, ((pp2[0], pp2[1] + decalage + j*(ESPACE + POINTILLE_HAUTEUR)),
                (POINTILLE_LARGEUR, POINTILLE_HAUTEUR)))
        
            for k in range(-1, 6):
                pygame.draw.rect(fenetre, BLANC, ((pp3[0], pp3[1] + decalage + k * BAU_HAUTEUR),
                (BAU_LARGEUR, BAU_HAUTEUR)))
        #
        #    for l in range(-1, 6):
        #        pygame.draw.rect(fenetre, BLANC, ((pp4[0], pp4[1] + decalage + l*(ESPACE + POINTILLE_HAUTEUR)),
        #        (POINTILLE_LARGEUR, POINTILLE_HAUTEUR)))
        #
            decalage += vitesse
            if decalage >= 100:
                decalage = -50
        
        # --- Déplacer notre voiture
        def deplacer_voiture(sens):
            voiture_position[0] += VOITURE_DEPLACEMENT * sens
        
        # --- initialisation pygame
        pygame.display.init()
        pygame.key.set_repeat(1, 1)
        
        # --- dessiner la fenêtre + titre
        fenetre_taille = (FENETRE_LARGEUR, FENETRE_HAUTEUR)
        fenetre = pygame.display.set_mode(fenetre_taille)
        pygame.display.set_caption('CARS')
        
        # --- afficher l'image 
        image = pygame.image.load('images/playercar.png').convert_alpha(fenetre)
        image = pygame.transform.scale(image, (VOITURE_LARGEUR, VOITURE_HAUTEUR))
        
        fini = False
        temps = pygame.time.Clock()
        
        while not fini:
            vitesse = 6
            fenetre.fill(GRIS)
            #Entrées Joueur
            for evenement in pygame.event.get():
                if evenement.type == pygame.QUIT:
                    fini = True
                elif evenement.type == pygame.KEYDOWN:
                    if evenement.key == pygame.K_LEFT:
                        deplacer_voiture(VERS_GAUCHE)
                    elif evenement.key == pygame.K_RIGHT:
                        deplacer_voiture(VERS_DROITE)
        
            if voiture_position[0] <= 0 :
                voiture_position[0] = 0
            elif voiture_position[0] + VOITURE_LARGEUR >= FENETRE_LARGEUR :
                voiture_position[0] = FENETRE_LARGEUR - VOITURE_LARGEUR
        
            if voiture_position[0] >= pp3[0] :
                vitesse = 4
        
            Dessiner_pointilles(vitesse)
        
            fenetre.blit(image, voiture_position)
        
            pygame.display.flip()
        
            temps.tick(60)
        
        pygame.display.quit()
        pygame.quit()
        exit()

        Encore une fois ce code fonctionne tout à fait sur d'autres machines malgré son optimisation douteuse... 

        • Partager sur Facebook
        • Partager sur Twitter
          29 novembre 2017 à 22:06:16

          Je veux bien tester ton code, au moins, pour voir le comportement de mon ordi. Peux-tu donner la taille de l'image en MB ? J'en téléchargerai une équivalente.

          Le code de ton ami est-il EXACTEMENT le même ? Quelles sont les versions de python et pygame, chez toi, et chez lui ?

          D'autres soucis sur ton mac ?

          Si la représentation de l'utilisation CPU est comme sur Linux, étant donné que tu as un cpu 2 cores, 110 % représente l'utilisation d'un coeur entier + 10 % du deuxième. En gros, 55 % de tout ton CPU. Ramené au 35 % (je crois) d'utilisation CPU du mac de ton ami, ça fait beaucoup, mais, c'est pas impressionnant non plus.

          Essaie, si possible, de te souvenir comment s'est passé le passage de ton mac fluide à lent (téléchargement d'un fichier douteux, clic sur un lien douteux, un pote t'apporte une clé USB douteuse, ...). Scanne ton mac (je ne sais pas comment faire).

          Et demande le changement de forum pour aller vers celui de MacOS, voire, poste sur des forums de Mac (tel MacG par exemple). Tu devrais avoir plus d'aide ;)

          • Partager sur Facebook
          • Partager sur Twitter
            29 novembre 2017 à 22:45:21

            Je suppose que la répartition est comme sous Linux vu qu'ils viennent tous les deux d'une base Unix... 

            Nous avons les mêmes versions python3 et pygame tous les deux... Et j'ai déjà essayé de le réinstaller mais sans succès... 

            Je suis assez méticuleux et mon mac n'est pas spécialement devenu lent après une action spécifique... tout autre programme tourne normalement... Mais même le plus simple programme implémenté en python pose problème... Je pense activement à me tourner vers le maraboutisme pour exorciser le mal... 

            En tout cas merci des conseils ! 

            ps : l'image fait 292KB (simple png) 

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              29 novembre 2017 à 22:51:28

              Comment tu installes Python et Pygame ? Je ne connais pas la procédure sous MacOS mais peut-être que le problème est là. Ou pas...

              -
              Edité par Anonyme 29 novembre 2017 à 22:52:09

              • Partager sur Facebook
              • Partager sur Twitter
                30 novembre 2017 à 9:31:30

                Bonjour,

                Je déplace dans le forum Mac OS ;)

                Me contacter par MP si besoin.

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

                [MacOS] Problème CPU 110% (pygame)

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown