Part 4: Hello Modules¶
Traducció assistida per IA - més informació i suggeriments
Consulteu la llista de reproducció completa al canal de YouTube de Nextflow.
La transcripció del vídeo està disponible aquí.
Aquesta secció cobreix com organitzar el codi del vostre workflow per fer el desenvolupament i el manteniment del vostre pipeline més eficient i sostenible. Específicament, demostrarem com utilitzar mòduls.
A Nextflow, un mòdul és un fitxer de codi independent, sovint encapsulant una única definició de procés.
Per utilitzar un mòdul en un workflow, només cal afegir una única línia amb una declaració include al fitxer de codi del vostre workflow; llavors podeu integrar el procés al workflow de la mateixa manera que ho faríeu normalment.
Això fa possible reutilitzar definicions de processos en múltiples workflows sense produir múltiples còpies del codi.
Quan vam començar a desenvolupar el nostre workflow, vam escriure tot en un únic fitxer de codi. Ara mourem els processos a mòduls individuals.
Això farà que el nostre codi sigui més compartible, flexible i mantenible.
Com començar des d'aquesta secció
Aquesta secció del curs assumeix que heu completat les Parts 1-3 del curs Hello Nextflow, però si us sentiu còmodes amb els conceptes bàsics coberts en aquestes seccions, podeu començar des d'aquí sense fer res especial.
0. Escalfament: Executeu hello-modules.nf¶
Utilitzarem l'script de workflow hello-modules.nf com a punt de partida.
És equivalent a l'script produït en completar la Part 3 d'aquest curs de formació, excepte que hem canviat les destinacions de sortida:
| hello-modules.nf | |
|---|---|
Només per assegurar-nos que tot funciona, executeu l'script una vegada abans de fer cap canvi:
Sortida de la comanda
Com abans, trobareu els fitxers de sortida al directori especificat al bloc output (aquí, results/hello_modules/).
Contingut del directori
Si això ha funcionat, esteu preparats per aprendre com modularitzar el codi del vostre workflow.
1. Creeu un directori per emmagatzemar mòduls¶
És una bona pràctica emmagatzemar els vostres mòduls en un directori específic.
Podeu anomenar aquest directori com vulgueu, però la convenció és anomenar-lo modules/.
2. Creeu un mòdul per a sayHello()¶
En la seva forma més simple, convertir un procés existent en un mòdul és poc més que una operació de copiar i enganxar. Crearem un fitxer base per al mòdul, copiarem el codi rellevant i després l'eliminarem del fitxer principal del workflow.
Després només caldrà afegir una declaració include perquè Nextflow sàpiga que ha d'incorporar el codi rellevant en temps d'execució.
2.1. Creeu un fitxer base per al nou mòdul¶
Creem un fitxer buit per al mòdul anomenat sayHello.nf.
Això ens dóna un lloc on posar el codi del procés.
2.2. Moveu el codi del procés sayHello al fitxer del mòdul¶
Copieu tota la definició del procés del fitxer del workflow al fitxer del mòdul.
| modules/sayHello.nf | |
|---|---|
Un cop fet això, elimineu la definició del procés del fitxer del workflow.
2.3. Afegiu una declaració include abans del bloc workflow¶
La sintaxi per incloure un procés des d'un mòdul és força directa:
Inserim això sobre el bloc params i l'omplim adequadament.
Veieu que hem omplert el nom del procés, sayHello, i la ruta al fitxer que conté el codi del mòdul, ./modules/sayHello.nf.
2.4. Executeu el workflow¶
Estem executant el workflow amb essencialment el mateix codi i entrades que abans, així que executem amb la bandera -resume i vegem què passa.
Sortida de la comanda
Això hauria d'executar-se molt ràpidament perquè tot està en memòria cau. Podeu comprovar les sortides publicades si voleu.
Nextflow ha reconegut que encara és tota la mateixa feina a fer, encara que el codi estigui dividit en múltiples fitxers.
Conclusió¶
Sabeu com extreure un procés a un mòdul local i sabeu que fer això no trenca la capacitat de reprendre el workflow.
Què segueix?¶
Practiqueu fent més mòduls. Un cop n'heu fet un, podeu fer-ne un milió més... Però fem-ne només dos més per ara.
3. Modularitzeu el procés convertToUpper()¶
3.1. Creeu un fitxer base per al nou mòdul¶
Creeu un fitxer buit per al mòdul anomenat convertToUpper.nf.
3.2. Moveu el codi del procés convertToUpper al fitxer del mòdul¶
Copieu tota la definició del procés del fitxer del workflow al fitxer del mòdul.
| modules/convertToUpper.nf | |
|---|---|
Un cop fet això, elimineu la definició del procés del fitxer del workflow.
3.3. Afegiu una declaració include abans del bloc params¶
Inseriu la declaració include sobre el bloc params i ompliu-la adequadament.
Això hauria de començar a semblar molt familiar.
3.4. Executeu el workflow de nou¶
Executeu això amb la bandera -resume.
Sortida de la comanda
Això encara hauria de produir la mateixa sortida que abans.
Dos fets, un més per fer!
4. Modularitzeu el procés collectGreetings()¶
4.1. Creeu un fitxer base per al nou mòdul¶
Creeu un fitxer buit per al mòdul anomenat collectGreetings.nf.
4.2. Moveu el codi del procés collectGreetings al fitxer del mòdul¶
Copieu tota la definició del procés del fitxer del workflow al fitxer del mòdul.
Un cop fet això, elimineu la definició del procés del fitxer del workflow.
4.3. Afegiu una declaració include abans del bloc params¶
Inseriu la declaració include sobre el bloc params i ompliu-la adequadament.
| hello-modules.nf | |
|---|---|
L'últim!
4.4. Executeu el workflow¶
Executeu això amb la bandera -resume.
Sortida de la comanda
Això encara hauria de produir la mateixa sortida que abans.
Conclusió¶
Sabeu com modularitzar múltiples processos en un workflow.
Felicitats, heu fet tota aquesta feina i absolutament res ha canviat en com funciona el pipeline!
Bromes a part, ara el vostre codi és més modular, i si decidiu escriure un altre pipeline que cridi un d'aquests processos, només cal que escriviu una curta declaració include per utilitzar el mòdul rellevant.
Això és millor que copiar i enganxar el codi, perquè si més endavant decidiu millorar el mòdul, tots els vostres pipelines heretaran les millores.
Què segueix?¶
Feu una petita pausa si us ve de gust.
Quan estigueu preparats, passeu a Part 5: Hello Containers per aprendre com utilitzar contenidors per gestionar dependències de programari de manera més convenient i reproduïble.
Qüestionari¶
Què és un mòdul a Nextflow?
Quina convenció s'utilitza típicament per emmagatzemar fitxers de mòduls?
Quina és la sintaxi correcta per utilitzar un mòdul?
Què passa amb la funcionalitat -resume quan s'utilitzen mòduls?
Quins són els beneficis d'utilitzar mòduls? (Seleccioneu tots els que corresponguin)