Python çalışmak için her seferinde sadece bir çekirdek kullanıyor mu?


13

Son zamanlarda python'un çalışmak için her seferinde sadece bir çekirdek kullandığını fark ettim. Tüm kaynakları (ikinci çekirdek) kullanmasının bir yolu, belki de özel yapılar veya komutlar var mı?


1
Yinelenen görevler için bir toplu işlem çalıştırıyorsanız ve komut dosyası doğru şeyi yapıyorsa ve yararlı bir şey yapmak için bir çekirdeğin% 100'ünü kullanıyorsa, o kadar tehlikeli olmayabilir. Diğer çekirdeği de% 100'de çalıştıran ikinci bir işlem başlatın. Brüt etki, bir dişli işlemden daha iyi olabilir. İşlenecek tek bir ağır göreviniz varsa durum farklıdır.
user30184

Bu zaten tartışmak daha fazla bilgi ve çözümler için bu konuya bakın gis.stackexchange.com/questions/55048/…
iRfAn 12:30

Sorunuzu, genel olarak Python veya daha spesifik olarak ArcPy (etiketlerinizde belirtildiği gibi) ile ilgili olup olmadığını açıklığa kavuşturmak için düzenleyebilir misiniz? İkincisi ise, durumun böyle olduğunu göstermek için bazı ayrıntılar ekleyebilir misiniz, yani nasıl fark ettiniz?
PolyGeo

Yanıtlar:


15

Bir Python betiği içindeki birden çok çekirdekten yararlanmak için alt işlemleri kullanabilirsiniz, böylece birkaç görev paralel olarak çalışabilir. Ancak tek bir görevi birkaç çekirdeğe bölemezsiniz. Bu SSS'deki ayrıntılı açıklamaya bakın: ArcGIS 10 çok çekirdekli işlemcileri ve / veya 64 bit İşletim Sistemlerini destekliyor mu?

Tecrübeli bir Python kullanıcısıysanız, Dev Zirvesi 2014'ten bu kullanıcı sunumunda açıklanan, Python Çok İşlemcili ve Kritik Yol Metodolojisini Kullanarak Paralel Coğrafi İşleme adı verilen yaklaşımla ilgilenebilirsiniz , yine de birkaç çekirdek kullanmanıza izin vermeyecektir. aynı görev.

Aksi takdirde, çoklu iş parçacığının nasıl çalıştığını test etmek için bu yılın sonunda ArcGIS Pro'nun (tamamen 64 bit uygulama) yayınlanmasını beklemeniz gerekecek ... (veya şu anda Beta'yı deneyin)


4

Bazılarının belirttiği gibi, ArcGIS Desktop'ta çoklu işleme desteği yoktur. Bir masaüstü ortamında CBS veri kümelerini işlemekten bahsederken, büyük bir iş akışını aynı anda birden çok çekirdek yüklerken hesaplanacak olan daha küçük parçalara bölüp bölemeyeceğimi bulmaya çalışıyorum. GP araçları davranışları önemli ölçüde farklılık gösterebileceğinden hemen hemen her vaka ayrı ayrı araştırılmalıdır.

Basit bir matematik problemini çözerken ne yapılacağını daha hızlı düşünün. 1'den 100'e kadar tüm sayıları saymanın en hızlı yolu nedir?

1) sonuçları tek tek toplayarak ve toplamı kademeli olarak birbirine ekleyerek (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 vb.). Bir çekirdek bu görev üzerinde çalışıyor.

2) değerleri önceden ayrı ayrı parçalara ayırın ve oradaki değerleri toplayın (1 ila 30, 31 ila 60 ve 60 ila 100). Üç çekirdek aynı anda çalışacaktır (son adım alınan üç değeri toplamak olacaktır).

Farklı GP araçları, farklı big-O gösterimi ile farklı algoritmaların uygulamaları olduğundan , muhtemelen birden fazla işlem gönderme açısından bunlara farklı şekilde yaklaşmanız gerekir.

Python'daki çoklu işlem kütüphanesinin nasıl çalıştığını öğrenmek iyi bir başlangıç ​​noktası olacaktır . Oldukça ağır kullanıyorum.

Ayrıca 64 bit Python kullanarak bir komut satırından Python komut dosyalarını çalıştırmanın genellikle daha hızlı çalışmayla sonuçlandığını fark ettim (IDE'nin çalışmasına kıyasla, ancak bu durum makinenizde olmayabilir). Arka plan coğrafi işleme 10.1'de tanıtıldı, ancak Python komut dosyalarını 64 bit Python ile çalıştırmayı deneyin ve performansın nasıl etkilendiğini görün.

Başka bir cevapta adlandırılan ArcGIS Pro beta 5'te indirilebilir ( herhangi bir hata göndermek ve bir ArcGIS Çevrimiçi Kuruluşlar hesabına erişebilmek için Esri Beta Topluluğunun bir katılımcısı olmanız gerektiğini unutmayın . Pro'yu çalıştırın).


1

Pypy , CPython'dan ("standart" python) 4-5 kat daha hızlı çalışan python'un uyumlu bir sürümüdür.

Kaynaktan oluşturacak kadar cesursanız, "aynı işlemde paralel olarak birden çok bağımsız CPU aç iş parçacığı çalıştırabilen" bir dal vardır. Bu, herhangi bir kodu yeniden yazmak zorunda kalmadan çoklu iş parçacığının avantajlarından yararlanabileceğiniz anlamına gelir.


0

Basit cevap hayır. Daha iyi cevap duruma bağlıdır.

CPython'un (en yaygın kullanılan python) uygulanması nedeniyle, Python'unuzun gerçekten çoklu iş parçacığından yararlanamayacağını varsaymak güvenlidir. Görmek:

http://en.wikipedia.org/wiki/Global_Interpreter_Lock

https://wiki.python.org/moin/GlobalInterpreterLock

IO'nun GIL'den bağışık olduğunu unutmayın.

Şimdi bunun üzerinde çalışabilirsiniz. Diğerlerinin de belirttiği gibi, alt süreçleri ortaya çıkarabilir ve çok işlemli kütüphane size yardımcı olabilir.


1
I / O bağışıktır, ancak çoğu GP aracı ve numpy'deki her şey dahil olmak üzere C'de uygulanan çoğu işlevi çağırır. GIL, pratik CBS ortamlarında düşünülenden daha az bir sınırlamadır.
Jason Scheirer

0

ArcGIS sorunlarını ele alamıyorum, ancak Python kullanarak birden fazla görevi işlerken, Kereviz (celeryproject.org) gibi bir görev yöneticisi olarak düşündünüz mü? Bu, farklı işleme görevlerini tanımlamanızı, dağıtım için bir "yöneticiye" göndermenizi, yöneticiden görev alan "işçileri" çalıştırmanızı, bunları işlemenizi ve sonuçları bildirmenizi gerektirir.

Bu, uygulanması önemsizdir, ancak inanılmaz bir esnekliğe sahiptir ve işleme yeteneğinden tam olarak yararlanmanıza izin verir (yani, bu boş çekirdekleri kullanın).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.