Saya menggunakan Python untuk menjalankan beberapa algoritma dan tidak peduli Python mana yang saya gunakan, dan saya telah mencoba banyak versi, penggunaan CPU mencapai maks 25%. Mengapa Python tidak memanfaatkan sisa sumber daya CPU saya? Saya mengubah prioritas layanan dari normal ke tinggi dan kemudian ke waktu nyata, dengan restart di antaranya, tetapi tidak ada yang berubah.
Apakah ada cara untuk membuat Python menggunakan 50% atau lebih dari CPU saya?
Jawaban:
Sederhananya, Anda menjalankan aplikasi berulir tunggal dalam sistem dengan 4 inti logis - dengan demikian, Anda memiliki satu proses, menggunakan semua inti.
Anda akan (dan ini bukan hal sepele) perlu menulis ulang algoritma menjadi multi-threaded, atau melihat apakah Anda dapat menjalankan 2 instance atau lebih, pada core tertentu untuk menggunakan lebih banyak CPU Anda. Tidak ada jalan lain.
sumber
Bahasa Python mendahului CPU multi-core, jadi tidak aneh bahwa ia tidak menggunakannya secara asli.
Selain itu, tidak semua program dapat mengambil untung dari banyak core. Perhitungan yang dilakukan dalam langkah-langkah, di mana langkah selanjutnya tergantung pada hasil langkah sebelumnya, tidak akan lebih cepat menggunakan lebih banyak inti. Masalah yang dapat di- vektor-kan (menerapkan perhitungan yang sama pada array data yang besar) dapat relatif mudah dibuat untuk menggunakan banyak inti karena perhitungan individu bersifat independen.
Ketika Anda melakukan banyak perhitungan, saya berasumsi Anda menggunakan numpy ? Jika tidak, coba lihat. Ini adalah ekstensi yang ditulis dalam C yang dapat menggunakan perpustakaan aljabar linier yang dioptimalkan seperti ATLAS. Ini dapat mempercepat perhitungan numerik secara signifikan dibandingkan dengan Python standar.
Karena itu, ada beberapa cara untuk menggunakan beberapa core dengan python.
multiprocessing
modul. Themultiprocessing.Pool
kelas menyediakan vektorisasi di beberapa CPU denganmap()
dan terkait metode. Ada trade-off di sini. Jika Anda harus mengomunikasikan sejumlah besar data antara proses maka overhead itu mungkin meniadakan keuntungan dari beberapa core.Perhatikan bahwa
threading
modul ini tidak terlalu berguna dalam hal ini. Agar manajemen memori tetap sederhana, kunci juru bahasa global ("GIL") memberlakukan bahwa hanya satu utas pada satu waktu yang dapat menjalankan bytecode python. Modul eksternal seperti numpy dapat menggunakan beberapa utas secara internal.sumber