Trình thông dịch Python chỉ sử dụng 12% sức mạnh CPU


26

Tôi đang sử dụng python trên ubfox để phân tích văn bản. Mặc dù khối lượng công việc nghiêm trọng, chương trình đang thực hiện việc sử dụng CPU như trong màn hình hệ thống vẫn duy trì ở mức 12%.

Tôi đã thay đổi ưu tiên của chương trình từ Normalđến Very Highnhưng điều đó không có hiệu lực.

Điều gì đang giới hạn mức sử dụng CPU mà chương trình python của tôi có thể nhận được và làm cách nào tôi có thể thay đổi điều đó, để chương trình có thể sử dụng nhiều năng lượng cpu hơn?

Câu trả lời:


73

Tôi giả sử bạn có một CPU với 8 lõi ảo (lõi tứ với siêu phân luồng có lẽ)? Điều đó có nghĩa là một luồng CPU / lõi ảo được tải đầy đủ bằng 12,5% tổng tải.

Trình thông dịch Python là một ứng dụng chỉ chạy theo một quy trình duy nhất theo mặc định và do đó không thể tận dụng nhiều hơn một lõi ảo. Ngay cả khi mã bạn chạy với nó sử dụng đa luồng, nó vẫn sẽ chỉ sử dụng một luồng CPU / lõi ảo, do GIL (khóa trình thông dịch toàn cầu) .

Chỉ khi chương trình Python của bạn sử dụng đa xử lý , trên thực tế, nó khởi động nhiều phiên bản của trình thông dịch Python và cho phép chúng thực hiện các tác vụ của bạn thực sự song song, bạn có thể tận dụng nhiều lõi ảo / luồng CPU. (Như @SargeBorsch đã chỉ ra trong nhận xét của mình, cũng có một số cách nâng cao để đạt được điều này mà không cần đa xử lý, nhưng đó thường không phải là thứ bạn tự viết nhanh.)


Điều đó thực sự có rất nhiều ý nghĩa. Có, tôi có một lõi tứ với 4 lõi (8 lõi ảo). Ty
Matthias Herrmann

9
@MatthiasHerrmann Bạn có thể xem xét một màn hình hệ thống để cho bạn biết tỷ lệ phần trăm mỗi CPU đang hoạt động. Bằng cách đó, bạn chỉ có thể thấy 1 trong số 8 CPU là 100%. Đây là một chủ đề trong AU về chủ đề này: Windows Tiện ích Windows tương đương (đối với việc sử dụng wifi và cpu)?
WinEunuuchs2Unix

7
Không đúng, có thể sử dụng tất cả các lõi từ quy trình python duy nhất. Người ta chỉ cần gọi mã C và phát hành GIL. Và nhiều thư viện hiện có làm chính xác điều đó (chẳng hạn numpy).
Sange Borsch

2
Hoặc sử dụng Jythonhoặc IronPython, không có GIL.
Ngừng làm hại Monica

19

Một khả năng khác, ít có khả năng trong trường hợp này là chương trình bị ràng buộc bởi đĩa, tức là nó đang đọc và ghi vào / từ đĩa bị chậm và CPU đang chờ đĩa.


5
cố gắng iotoptheo dõi các chương trình ràng buộc với iowait
con mèo

1
Hoặc chính mã là đồng bộ và chặn.
Zydnar

Đó là sai lầm của tôi cảm ơn rất nhiều
Fipsi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.