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.
- Built-in adalah
multiprocessing
modul. The multiprocessing.Pool
kelas menyediakan vektorisasi di beberapa CPU dengan map()
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.
- Gunakan bentuk numpy yang cocok. Jika numpy dibangun dengan pustaka ATLAS multithreading, itu akan lebih cepat pada masalah besar.
- Gunakan modul ekstensi seperti numexpr , python paralel , corepy atau Copenhagen Vector Byte Code .
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.