2015-03-17 13 views
6

Not daha fazla süreçler: Ben multiprocessing 2 gün önce arazi içine "forayed". Yani benim anlayışım çok basit.Multiprocessing: cpu.count

Yüklemeler için amazon s3 paketlerine yükleme yazıyorum. Dosya boyutu daha büyükse (100mb), multiprocessing modülünden pool kullanarak paralel yüklemeler gerçekleştirdim. core i7 ile bir makine kullanıyorum, cpu_count8 vardı. pool = Pool(process = 6) yaparsam 6 çekirdek kullanırım ve dosya parçalara yüklenmeye başlar ve ilk 6 parçanın yüklemeleri eşzamanlı olarak başlar. process, cpu_count'dan daha büyük olduğunda ne olacağını görmek için 20 girdim (20 çekirdeği kullanmak istiyorum). Bir hata bloğu almak yerine benim için sürpriz, program aynı anda 20 parça yüklemeye başladı (bol miktarda parça olduğundan emin olmak için daha küçük bir chunk size kullanmıştım). Bu davranışı anlamadım. Sadece 8 çekirdeğim var, o zaman ne kadar program 20 giriş kabul edemez? process=6 derken, aslında 6 iş parçacığı kullanıyor mu? Hangi 1000 iş parçacığı olabileceğinden, 20 geçerli bir girdi olarak tek açıklama olabilir. Lütfen biri bunu bana açıklayabilir mi.

Düzenleme: here kodu 'ödünç'

. Ben sadece biraz değişiklik yaptım ki, kullanıcıya parallel_processes - 4

+1

Konu, işlem ve çekirdekleri karıştırırsınız. Hepsi çok farklı "şeyler". 'process = 6' 'yı ayarlarsanız, sadece bir çekirdek üzerinde çalışabilecek 6 ** process ** kullanacaktır veya hepsi bir core üzerinde çalışabilir - işletim sistemine ve sistem yüküne bağlıdır. "Soru" ile ilgili olarak - lütfen bazı kodları sağlayın. –

cevap

7

ayarı yerine kendi seçiminde çekirdek kullanım için soruyorum. Bilgisayarınızda eşzamanlı olarak çalışan işlemlerin sayısı, çekirdek sayısıyla sınırlı değildir. Aslında muhtemelen şu anda bilgisayarınızda çalışan yüzlerce program var - her biri kendi işlemiyle. Çalışmak için, OS, her işlem için 8 işlemcinizden birini atar veya yalnızca geçici olarak işlenir - bir noktada durdurulabilir ve başka bir işlem yerini alır. Daha fazla bilgi edinmek için What is the difference between concurrent programming and parallel programming?'a bakın.

Düzenleme: Yükleme örneğinizde daha fazla işlem atamak mantıklı olabilir veya olmayabilir. Diskten okuma ve ağ üzerinden gönderme normalde python'da bir engelleme işlemidir. Veri yığınının okunmasını veya gönderilmesini bekleyen bir işlem, başka bir işlemin IO'suna başlayabilmesi için durdurulabilir. Öte yandan, çok fazla işlemle, G/Ç dosyası veya ağ G/Ç işlemi bir darboğaz haline gelecek ve program geçişi için gereken ek yük nedeniyle programınız yavaşlayacaktır.

+0

, "1 Gb" nin üzerinde bir dosya yüklerken, "~ 10 dakika" dan (seri yüklemeler kullanılırken) "6 dakikaya" düştüğü zaman (paralel yüklemeler kullandığımda) – letsc

İlgili konular