Penerjemah Python hanya menggunakan Daya CPU 12%


26

Saya menggunakan python di ubuntu untuk analisis teks. Terlepas dari jumlah pekerjaan yang berat, program ini melakukan penggunaan CPU seperti yang ditunjukkan dalam monitor sistem tetap konsisten sebesar 12%.

Saya mengubah prioritas program dari Normalmenjadi Very Hightetapi itu tidak berpengaruh.

Apa yang membatasi jumlah penggunaan CPU yang bisa didapatkan oleh program python saya dan bagaimana cara mengubahnya, sehingga program dapat menggunakan lebih banyak daya cpu?

Jawaban:


73

Saya berasumsi Anda memiliki CPU dengan 8 core virtual (quad-core dengan hyper-threading mungkin)? Itu berarti satu utas CPU penuh / inti virtual sama dengan total beban 12,5%.

Penerjemah Python adalah aplikasi yang hanya berjalan sebagai satu proses tunggal secara default dan karenanya tidak dapat memanfaatkan lebih dari satu inti virtual. Sekalipun kode yang Anda jalankan dengannya menggunakan multithreading, ia hanya akan menggunakan satu CPU thread / virtual core, karena GIL (global interpreter lock) .

Hanya jika program Python Anda menggunakan multiprocessing , yang sebenarnya memulai beberapa contoh interpreter Python dan memungkinkan mereka melakukan tugas-tugas Anda secara paralel, Anda dapat memanfaatkan beberapa inti virtual / utas CPU. (Seperti yang @SargeBorsch tunjukkan dalam komentarnya, ada juga beberapa cara canggih untuk mencapai hal ini tanpa multiprosesor, tapi itu biasanya bukan sesuatu yang Anda cepat tulis sendiri.)


Itu sebenarnya sangat masuk akal. Ya saya memiliki quad-core dengan 4 core (8 core virtual). Ty
Matthias Herrmann

9
@MatthiasHerrmann Anda dapat mempertimbangkan monitor sistem untuk menunjukkan kepada Anda berapa persen setiap CPU beroperasi. Dengan begitu Anda bisa melihat hanya 1 dari 8 CPU yang 100%. Berikut adalah satu utas dalam AU tentang subjek: Windows "gadget" setara (untuk penggunaan wifi dan cpu)?
WinEunuuchs2Unix

7
Tidak benar, mungkin untuk menggunakan semua inti dari proses python tunggal dengan baik. Seseorang hanya perlu memanggil kode C dan melepaskan GIL. Dan banyak perpustakaan yang ada melakukan hal itu (numpy misalnya).
Sarge Borsch

2
Atau gunakan Jythonatau IronPython, yang tidak memiliki GIL.
Stop Harming Monica

19

Kemungkinan lain, kurang mungkin dalam hal ini, adalah bahwa program ini terikat disk, yaitu membaca dan menulis ke / dari disk yang lambat, dan CPU sedang menunggu disk.


5
cobalah iotopuntuk memonitor program yang terikat ke iowait
cat

1
Atau kodenya sendiri sinkron dan memblokir.
Zydnar

Itu kesalahan saya, terima kasih banyak
Fipsi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.