Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何在bash脚本中使用并行编程/多线程?_Multithreading_Bash_Parallel Processing_Fastq - Fatal编程技术网

Multithreading 如何在bash脚本中使用并行编程/多线程?

Multithreading 如何在bash脚本中使用并行编程/多线程?,multithreading,bash,parallel-processing,fastq,Multithreading,Bash,Parallel Processing,Fastq,这是我的剧本: #!/bin/bash #script to loop through directories to merge fastq files sourcedir=/path/to/source destdir=/path/to/dest for f in $sourcedir/* do fbase=$(basename "$f") echo "Inside $fbase" zcat $f/*R1*.fastq.gz | gzip > $destdir/

这是我的剧本:

#!/bin/bash
#script to loop through directories to merge fastq files
sourcedir=/path/to/source
destdir=/path/to/dest

for f in $sourcedir/*
do
    fbase=$(basename "$f")
    echo "Inside $fbase"
    zcat $f/*R1*.fastq.gz | gzip > $destdir/"$fbase"_R1.fastq.gz
    zcat $f/*R2*.fastq.gz | gzip > $destdir/"$fbase"_R2.fastq.gz
done

在“source”目录中大约有30个子目录。每个子目录都有特定的R1.fastq.gz文件和R2.fastq.gz文件,我想将它们合并到一个R1.fastq.gz和R2.fastq.gz文件中,然后将合并的文件保存到目标目录。我的代码运行良好,但由于数据量大,我需要加快速度。我只是想知道有没有办法在我的脚本中实现多线程编程?如何运行脚本以使多个作业并行运行?bash脚本新手,希望您能提供帮助。

我不确定,但您可以尝试在命令末尾使用
&
,如下所示

zcat $f/*R1*.fastq.gz | gzip > $destdir/"$fbase"_R1.fastq.gz &
zcat $f/*R2*.fastq.gz | gzip > $destdir/"$fbase"_R2.fastq.gz &

最简单的方法是在后台执行命令,在命令末尾添加
&

#!/bin/bash
#script to loop through directories to merge fastq files
sourcedir=/path/to/source
destdir=/path/to/dest

for f in $sourcedir/*
do
    fbase=$(basename "$f")
    echo "Inside $fbase"
    zcat $f/*R1*.fastq.gz | gzip > $destdir/"$fbase"_R1.fastq.gz &
    zcat $f/*R2*.fastq.gz | gzip > $destdir/"$fbase"_R2.fastq.gz &
done
从:

如果命令由控制运算符“&”终止,则shell在子shell中异步执行该命令。这称为在后台执行命令。shell不会等待命令完成,返回状态为0(true)。当作业控制处于非活动状态时(请参见作业控制),在没有任何显式重定向的情况下,异步命令的标准输入将从/dev/null重定向


我实际上指的是关于这个的其他stackoverflow问题,他们提到了一些像pid和等待之类的东西。那么,在命令末尾添加&是否是并行化作业的有效方法?@user2703967是的。。。添加
&
会生成一个新的子shell,它会在脚本继续运行时自动运行。如果您需要比这更复杂的东西,您可能不应该首先使用bash。谢谢,最后一个问题。当我在“完成”之后使用“等待”时,会有什么不同?@user2703967让你的操作系统来处理它(它会这样做)。除非你做的事情太复杂了,以至于连想都不敢想在bash中做,否则这真的不值得担心。哥们,这纯粹是天才。太明显了!哇!非常感谢。既然您清楚地了解了生物信息学,您应该阅读以下内容: