Python dili çok çekirdekli işlemcilerden önce gelir, bu yüzden onları yerel olarak kullanmaması garip değildir.
Ayrıca, tüm programlar birden fazla çekirdekten kazanç elde edemez. Bir sonraki adımın önceki adımın sonuçlarına bağlı olduğu adımlarla yapılan bir hesaplama, daha fazla çekirdek kullanarak daha hızlı olmayacaktır. Vektörleştirilebilecek problemler (aynı hesaplamayı büyük veri dizilerine uygulamak), tek tek hesaplamalar bağımsız olduğu için çoklu çekirdeklerin kullanımı nispeten kolay olabilir.
Çok fazla hesaplama yaparken, numpy kullandığınızı varsayıyorum ? Değilse, kontrol edin. ATLAS gibi optimize edilmiş doğrusal cebir kütüphanelerini kullanabilen C dilinde yazılmış bir eklentidir. Standart Python ile karşılaştırıldığında, sayısal hesaplamaları önemli ölçüde hızlandırabilir.
Bunu söyledikten sonra python ile çoklu çekirdek kullanmanın birkaç yolu vardır.
- Yerleşik
multiprocessing
modül. multiprocessing.Pool
Sınıf ile çok sayıda işlemci üzerinde vektörelleştirmeyi sağlar map()
ve ilgili yöntemler. Yine de burada bir takas var. İşlemler arasında büyük miktarda veri iletmeniz gerekiyorsa, bu ek yük birden çok çekirdeğin avantajını olumsuz etkileyebilir.
- Uygun bir numpy yapı kullanın. Numpy çok iş parçacıklı bir ATLAS kütüphanesi ile oluşturulmuşsa, büyük problemlerde daha hızlı olacaktır.
- Numexpr , paralel python , corepy veya Copenhagen Vector Byte Code gibi uzatma modülleri kullanın .
Not threading
modül bu konuda o kadar yararlı değildir. Bellek yönetimini basit tutmak için, genel yorumlayıcı kilidi ("GIL"), bir kerede yalnızca bir iş parçacığının python bayt kodunu çalıştırmasını zorlar. Numpy gibi harici modüller ise dahili olarak birden fazla iplik kullanabilir.