SORU
18 Mart 2009, ÇARŞAMBA


Python Çoklu işlem: arasında salt okunur bir büyük nesne paylaşım süreçleri?

Alt süreçleri multiprocessing) kökenli programında nesneleri daha önce yaratılan paylaşmaz mısınız?

Aşağıdaki kurulum var:

do_some_processing(filename):
    for line in file(filename):
        if line.split(',')[0] in big_lookup_object:
            # something here

if __name__ == '__main__':
    big_lookup_object = marshal.load('file.bin')
    pool = Pool(processes=4)
    print pool.map(do_some_processing, glob.glob('*.data'))

Belleğe büyük bir nesne, o zaman bu büyük nesne yapacak bir işçi bir havuzu oluşturmak dolduruyorum. Büyük nesne işlemler arasında değişiklikler geçmesine gerek yok salt okunur, erişilir.

Benim soru şudur: büyük nesne, paylaşılan belleğe yüklü ise unıx/c işlemi yapıyorum kökenli, olacak o kadar, ya da her işlem büyük nesne kendi kopyasını yüklemek?

Güncelleme: biraz daha açıklamak için - big_lookup_object paylaşılan bir arama nesnedir. O kadar bölünmüş ve ayrı ayrı işlem yapmaya ihtiyacım yok. Bunu tek bir kopyasını tutmak istiyorum. Bunu bölmek istiyorum bu işi diğer büyük dosyaları bir sürü okuma ve arama nesnesine karşı bu büyük dosyaları öğeleri arıyor.

Diğer güncelleme: veritabanı iyi bir çözümdür, memcached daha iyi bir çözüm olabilir, ve disk () hasıraltı veya derleme dosyası bile daha iyi olabilir. Bu soruyu bellek çözümünde bir yer özellikle ilgimi çekti. Nihai çözüm için hadoop kullanarak olacak, ama eğer bellek sürümü yerel olarak alabilir miyim diye görmek istedim.

CEVAP
18 Mart 2009, ÇARŞAMBA


"Çocuk süreçler payı nesneleri programında daha önce oluşturulan Çoklu işlem) oluşmasına neden?"

Hayır.

İşlemleri bağımsız hafıza alanı var.

Çözüm 1

En iyi çalışanları çok büyük bir yapı kullanmak için şunu yapın.

  1. Olarak her bir işçi "-- stdin sonuçları Ara okur, çalışır, stdout. Ara sonuçları yazar" yazma süzgeç

  2. Bir boru hattı olarak tüm işçiler bağlayın:

    process1 <source | process2 | process3 | ... | processn >result
    

Her işlem, okur, çalışır ve yazar.

Tüm bu işlemler aynı anda çalışan olduğundan son derece verimlidir. Doğrudan işlemler arasında paylaşılan tamponlar geçiyor yazar ve okur.

< / ^ hr .

Çözüm 2

Bazı durumlarda, daha karmaşık bir yapısı var, çoğu zaman bir "fan-out" yapısı. Bu durumda birden fazla çocuğu olan bir anne var.

  1. Ana Veri Kaynağı açılır. Ebeveyn ve çocuk çok sayıda çatal.

  2. Ana kaynak kaynak, çiftlikler parçaları aynı anda çalışan her çocuk okur.

  3. Üst sonuna ulaştığında, boru kapatın. Çocuk dosya sonu alır ve normal olarak tamamlanır.

Çocuk parçaları her çocuk sadece sys.sydin okur çünkü yazmak hoş değildir.

Üst tüm çocukları yumurtlama ve düzgün boru tutucu ayak oyunları çok iyi biraz var, ama o kadar da kötü değil.

Fan-ters yapıdır. Bağımsız çalışan işlemlerin bir dizi ortak bir sürecin içine girdi aralığı gerekiyor. Toplayıcı bir çok kaynaktan okumak için olduğu gibi yazmak kolay değildir.

Birçok named okuma genellikle select modül bekleyen girişi olan kullanılarak yapılır.

< / ^ hr .

Çözüm 3

Paylaşılan bir arama veritabanı tanımıdır.

Çözüm 3A -- yük bir veritabanı. İşçiler veritabanında verileri işlemek izin.

3B -- çok basit bir server werkzeug (veya benzeri) HTTP yanıt WSGI uygulamalarını sağlamak için oluşturmak çözüm işçilerin sunucu sorgulayabilir.

< / ^ hr .

Çözüm 4

Paylaşılan dosya sistemi nesnesi. Unıx işletim sistemi paylaşılan bellek nesneleri sunuyor. Bu sadece O daha Kongre tamponlu yerine yapılır/takas okur, bellek eşlenen dosyaları.

Çeşitli şekillerde Python bir bağlam bunu yapabilirsiniz

  1. (1) sonları orijinal büyük küçük nesneleri nesne, ve (2) başlar işçilerin bu bir başlangıç programı, küçük bir nesne ile her yaz. Küçük nesneleri turşusu Python nesneleri dosyanın bir nebze okuma zamanı kaydetmek için olabilir.

  2. Yazmak bir başlangıç programı (1) okur orijinal devasa nesne ve yazar bir sayfa yapılı, bayt kodlanmış dosya kullanarak seek işlemleri güvence altına tek tek bölümler bulmak kolay basit istiyor. Bu veritabanı motoru -- sayfa halinde veri sonu, her sayfa seek) bulmak için kolay yapar.

    Bu sayfa büyük yapılı bu erişim ile çalışanlar dosya Spawn. Her işçi ilgili kısımları için arama ve onların orada iş yapabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • Kayla Caton - Peet

    Kayla Caton

    23 HAZİRAN 2012
  • Noam Erez

    Noam Erez

    3 NİSAN 2012