2015-11-20 9 views
7

Sto usando il modulo pyglet python (python 3 su Windows). Quando faccio riferimento a qualsiasi classe all'interno di pyglet.image, l'utilizzo della CPU di Python salta e non si interrompe finché non esco da python. Ad esempio:Perché fare riferimento a una classe in pyglet.image (python) causa un carico pesante della CPU su Windows?

Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 
C:\Anaconda3>python.exe 
Python 3.4.3 |Anaconda 2.3.0 (64-bit)| (default, Mar 6 2015, 12:06:10) [MSC v.1 
600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pyglet #No problem! 
>>> pyglet.image.ImageData #Heavy CPU load until I exit python 
<class 'pyglet.image.ImageData'> 

È questo comportamento previsto? Perché menzionare questa classe (nemmeno istanziarlo) porta a un carico così elevato della CPU?

sistemi che ho provato:

  • desktop di Windows 7 con Anaconda pitone 3.4.3 e pyglet installato attraverso 'pip installare pyglet': l'utilizzo elevato della CPU (il mio problema)

  • Lo stesso desktop Win7 con Anaconda python 3.4.3, ma pyglet installato tramite 'pip install hg + https://bitbucket.org/pyglet/pyglet': elevato utilizzo della CPU.

  • Lo stesso desktop Win7 con python 3.5 di python.org e pyglet installato tramite "pyglet di installazione di pip": elevato utilizzo della CPU.

  • Fedora 22 laptop Lenovo con python 3.4.2 e pyglet 1.2.1 installato tramite dnf: nessun problema.

  • Windows 10 laptop HP con Anaconda python 3.4 e pyglet installati tramite 'pip install pyglet': nessun problema.

È possibile che questo sia dipendente dall'hardware?

+1

Si potrebbe provare a profilarlo: https://docs.python.org/3.5/library/profile.html – Nathaniel

+1

Si ottiene un traceback se si preme ctrl-C? – shx2

+0

L'input che porta ad un elevato utilizzo della CPU ritorna immediatamente. Se I Ctrl-C, non ottengo un traceback. – Andrew

risposta

2

Probabilmente è associato alle seguenti linee sul module:

# Initialise default codecs 
from pyglet.image import codecs as _codecs 
_codecs.add_default_image_codecs() 

L'ordine per caricare il default codecs è:

# Add the codecs we know about. These should be listed in order of 
# preference. This is called automatically by pyglet.image. 

# Compressed texture in DDS format 
try: 
    from pyglet.image.codecs import dds 
    add_encoders(dds) 
    add_decoders(dds) 
except ImportError: 
    pass 

# Mac OS X default: QuickTime 
(...) 

# Windows XP default: GDI+ 
(...) 

# Linux default: GdkPixbuf 2.0 
(...) 

# Fallback: PIL 
(...) 

# Fallback: PNG loader (slow) 
(...) 

# Fallback: BMP loader (slow) 
(...) 

A causa di caricamento pigro pyglet.image viene caricato solo quando si fa riferimento a qualcosa, e probabilmente stai usando uno dei lenti fallback. In questo caso, potresti provare a installare/disinstallare i codec in modo da usarne uno alla volta e scoprire se il problema è effettivamente con i codec. Pubblicare le tue versioni di questi codec può aiutare a riprodurre il problema.

+0

Grazie per aver dato un'occhiata! Non sarò in grado di controllarlo fino a domani, ma è produttivo, quindi ottieni la taglia. – Andrew

Problemi correlati