Bölüm 4: Hello Modules¶
Yapay Zeka Destekli Çeviri - daha fazla bilgi ve iyileştirme önerileri
Bu bölüm, pipeline'ınızın geliştirilmesini ve bakımını daha verimli ve sürdürülebilir hale getirmek için iş akışı kodunuzu nasıl organize edeceğinizi kapsar. Özellikle, modülleri nasıl kullanacağınızı göstereceğiz.
Nextflow'da bir modül, bağımsız bir kod dosyasında kendi başına kapsüllenmiş tek bir süreç tanımıdır. Bir iş akışında bir modül kullanmak için, iş akışı kod dosyanıza tek satırlık bir import ifadesi eklemeniz yeterlidir; ardından süreci normalde yaptığınız gibi iş akışına entegre edebilirsiniz. Bu, kodun birden fazla kopyasını üretmeden süreç tanımlarını birden fazla iş akışında yeniden kullanmayı mümkün kılar.
İş akışımızı geliştirmeye başladığımızda, her şeyi tek bir kod dosyasına yazdık. Şimdi süreçleri bireysel modüllere taşıyacağız.
Bu, kodumuzu daha paylaşılabilir, esnek ve bakımı kolay hale getirecek.
Bu bölümden nasıl başlanır
Bu kursun bu bölümü, Hello Nextflow kursunun 1-3. Bölümlerini tamamladığınızı varsayar, ancak o bölümlerde ele alınan temel konulara hakimseniz, özel bir şey yapmadan buradan başlayabilirsiniz.
0. Isınma: hello-modules.nf dosyasını çalıştırın¶
Başlangıç noktası olarak hello-modules.nf iş akışı betiğini kullanacağız.
Bu betik, bu eğitim kursunun 3. Bölümünde üretilen betiğe eşdeğerdir; ancak çıktı hedeflerini değiştirdik:
| hello-modules.nf | |
|---|---|
Her şeyin çalıştığından emin olmak için, herhangi bir değişiklik yapmadan önce betiği bir kez çalıştırın:
Komut çıktısı
Daha önce olduğu gibi, çıktı dosyalarını output bloğunda belirtilen dizinde bulacaksınız (burada, results/hello_modules/).
Dizin içerikleri
Bu sizin için çalıştıysa, iş akışı kodunuzu modülerleştirmeyi öğrenmeye hazırsınız.
1. Modülleri depolamak için bir dizin oluşturun¶
Modüllerinizi belirli bir dizinde saklamak en iyi pratiktir.
Bu dizine istediğiniz adı verebilirsiniz, ancak konvansiyon modules/ olarak adlandırmaktır.
İpucu
Burada size yerel modülleri nasıl kullanacağınızı gösteriyoruz, yani uzak modüllerin aksine iş akışı kodunun geri kalanıyla aynı depoda yerel olarak depolanan modüller; uzak modüller diğer (uzak) depolarda saklanır. Uzak modüller hakkında daha fazla bilgi için dokümantasyona bakın.
2. sayHello() için bir modül oluşturun¶
En basit haliyle, mevcut bir süreci modüle dönüştürmek bir kopyala-yapıştır işleminden biraz fazlasıdır. Modül için bir dosya taslağı oluşturacağız, ilgili kodu kopyalayacağız ve ardından ana iş akışı dosyasından sileceğiz.
Sonra tek yapmamız gereken, Nextflow'un çalışma zamanında ilgili kodu çekmesini bilmesi için bir import ifadesi eklemek.
2.1. Yeni modül için bir dosya taslağı oluşturun¶
sayHello.nf adlı modül için boş bir dosya oluşturalım.
Bu bize süreç kodunu koyacağımız bir yer verir.
2.2. sayHello süreç kodunu modül dosyasına taşıyın¶
Tüm süreç tanımını iş akışı dosyasından modül dosyasına kopyalayın, #!/usr/bin/env nextflow shebang'ını da kopyaladığınızdan emin olun.
| modules/sayHello.nf | |
|---|---|
Bu yapıldıktan sonra, süreç tanımını iş akışı dosyasından silin, ancak shebang'ı yerinde bıraktığınızdan emin olun.
2.3. İş akışı bloğundan önce bir import tanımı ekleyin¶
Yerel bir modülü içe aktarma sözdizimi oldukça basittir:
Bunu params bloğunun üstüne ekleyelim ve uygun şekilde dolduralım.
Modül adını, sayHello, ve modül kodunu içeren dosyanın yolunu, ./modules/sayHello.nf, doldurduğumuzu görüyorsunuz.
2.4. İş akışını çalıştırın¶
İş akışını temelde daha önce olduğu gibi aynı kod ve girdilerle çalıştırıyoruz, bu yüzden -resume bayrağıyla çalıştıralım ve ne olduğunu görelim.
Komut çıktısı
Her şey önbelleklendiği için bu çok hızlı çalışmalıdır. Yayınlanan çıktıları kontrol etmekten çekinmeyin.
Nextflow, kod birden fazla dosyaya bölünmüş olsa bile yapılması gereken işin hâlâ aynı olduğunu fark etti.
Özet¶
Bir süreci yerel bir modüle nasıl çıkaracağınızı biliyorsunuz ve bunun iş akışının devam ettirilebilirliğini bozmadığını biliyorsunuz.
Sırada ne var?¶
Daha fazla modül yapmayı pratik edin. Bir tane yaptıktan sonra, bir milyon tane daha yapabilirsiniz... Ama şimdilik sadece iki tane daha yapalım.
3. convertToUpper() sürecini modülerleştirin¶
3.1. Yeni modül için bir dosya taslağı oluşturun¶
convertToUpper.nf adlı modül için boş bir dosya oluşturun.
3.2. convertToUpper süreç kodunu modül dosyasına taşıyın¶
Tüm süreç tanımını iş akışı dosyasından modül dosyasına kopyalayın, #!/usr/bin/env nextflow shebang'ını da kopyaladığınızdan emin olun.
| modules/convertToUpper.nf | |
|---|---|
Bu yapıldıktan sonra, süreç tanımını iş akışı dosyasından silin, ancak shebang'ı yerinde bıraktığınızdan emin olun.
3.3. params bloğundan önce bir import tanımı ekleyin¶
Import tanımını params bloğunun üstüne ekleyin ve uygun şekilde doldurun.
Bu çok tanıdık görünmeye başlamalı.
3.4. İş akışını tekrar çalıştırın¶
Bunu -resume bayrağıyla çalıştırın.
Komut çıktısı
Bu hâlâ daha önce olduğu gibi aynı çıktıyı üretmelidir.
İkisi tamam, bir tane daha kaldı!
4. collectGreetings() sürecini modülerleştirin¶
4.1. Yeni modül için bir dosya taslağı oluşturun¶
collectGreetings.nf adlı modül için boş bir dosya oluşturun.
4.2. collectGreetings süreç kodunu modül dosyasına taşıyın¶
Tüm süreç tanımını iş akışı dosyasından modül dosyasına kopyalayın, #!/usr/bin/env nextflow shebang'ını da kopyaladığınızdan emin olun.
Bu yapıldıktan sonra, süreç tanımını iş akışı dosyasından silin, ancak shebang'ı yerinde bıraktığınızdan emin olun.
4.3. params bloğundan önce bir import tanımı ekleyin¶
Import tanımını params bloğunun üstüne ekleyin ve uygun şekilde doldurun.
Sonuncusu!
4.4. İş akışını çalıştırın¶
Bunu -resume bayrağıyla çalıştırın.
Komut çıktısı
Bu hâlâ daha önce olduğu gibi aynı çıktıyı üretmelidir.
Özet¶
Bir iş akışında birden fazla süreci nasıl modülerleştireceğinizi biliyorsunuz.
Tebrikler, tüm bu işi yaptınız ve pipeline'ın çalışma şeklinde kesinlikle hiçbir şey değişmedi!
Şakayı bir kenara bırakırsak, artık kodunuz daha modüler ve bu süreçlerden birini çağıran başka bir pipeline yazmaya karar verirseniz, ilgili modülü kullanmak için yalnızca bir kısa import ifadesi yazmanız gerekiyor. Bu, kodu kopyala-yapıştır yapmaktan daha iyi çünkü daha sonra modülü geliştirmeye karar verirseniz, tüm pipeline'larınız bu iyileştirmeleri miras alacak.
Sırada ne var?¶
İsterseniz kısa bir mola verin.
Hazır olduğunuzda, yazılım bağımlılıklarını daha kullanışlı ve tekrarlanabilir bir şekilde yönetmek için konteynerleri nasıl kullanacağınızı öğrenmek için Bölüm 5: Merhaba Konteynerler'e geçin.
Quiz¶
Nextflow'da modül nedir?
Modül dosyaları için önerilen adlandırma kuralı nedir?
Modül dosyaları nerede saklanmalıdır?
Bir modülü içe aktarmak için doğru sözdizimi nedir?
Modüller kullanıldığında -resume işlevselliğine ne olur?
Modül kullanmanın faydaları nelerdir? (Uygulanabilen tümünü seçin)