2015-11-20 16 views
7

Tôi đang sử dụng mô-đun pyglet của python (python 3 trên Windows). Khi tôi tham khảo bất kỳ lớp nào trong pyglet.image, việc sử dụng CPU của python nhảy lên và không thả cho đến khi tôi thoát khỏi python. Ví dụ:Tại sao đề cập đến một lớp trong python (python) pyglet.image gây tải CPU nặng trên 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'> 

Đây có phải là hành vi mong đợi không? Tại sao đề cập đến lớp này (thậm chí không instantiating nó) dẫn đến tải CPU cao như vậy?

Systems Tôi đã thử nghiệm:

  • Windows 7 máy tính để bàn với Anaconda python 3.4.3 và pyglet cài đặt qua PIP cài đặt pyglet ': sử dụng CPU cao (vấn đề của tôi)

  • Cùng một máy tính để bàn Win7 với Anaconda python 3.4.3, nhưng pyglet được cài đặt thông qua 'pip install hg + https://bitbucket.org/pyglet/pyglet': Sử dụng CPU cao.

  • Cùng một máy tính Win7 với python 3.5 từ python.org và pyglet được cài đặt thông qua 'pip install pyglet': Sử dụng CPU cao.

  • Fedora 22 Máy tính xách tay Lenovo với trăn 3.4.2 và pyglet 1.2.1 được cài đặt qua dnf: không sao.

  • Máy tính xách tay Windows 10 HP với con trăn Anaconda 3.4 và pyglet được cài đặt thông qua 'pip install pyglet': không có vấn đề gì.

Có thể điều này phụ thuộc vào phần cứng không?

+1

Bạn có thể thử lược tả nó: https://docs.python.org/3.5/library/profile.html – Nathaniel

+1

Bạn có nhận được truy xuất lại nếu nhấn ctrl-C không? – shx2

+0

Đầu vào dẫn đến mức sử dụng CPU cao trở lại ngay lập tức. Nếu tôi Ctrl-C, tôi không nhận được một traceback. – Andrew

Trả lời

2

Nó có lẽ là liên quan đến các dòng sau vào module:

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

Trình tự nạp mặc định codecs là:

# 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) 
(...) 

Do lười tải pyglet.image chỉ được nạp khi bạn tham khảo một cái gì đó, và bạn có thể sử dụng một trong những sự sụp đổ chậm. Nếu đó là trường hợp có thể bạn có thể thử cài đặt/gỡ bỏ cài đặt các codec để bạn sử dụng một tại một thời điểm và tìm hiểu xem vấn đề thực sự là với các codec. Đăng phiên bản của các codec này có thể giúp tái tạo sự cố.

+0

Cảm ơn bạn đã xem! Tôi sẽ không thể kiểm tra điều này cho đến ngày mai, nhưng điều này là hiệu quả, vì vậy bạn nhận được tiền thưởng. – Andrew

Các vấn đề liên quan