Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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
如何指定通过bash脚本运行的python脚本中要使用的CPU内核数?_Python_Python 3.x_Bash_Parallel Processing_Subprocess - Fatal编程技术网

如何指定通过bash脚本运行的python脚本中要使用的CPU内核数?

如何指定通过bash脚本运行的python脚本中要使用的CPU内核数?,python,python-3.x,bash,parallel-processing,subprocess,Python,Python 3.x,Bash,Parallel Processing,Subprocess,我想将一些fasta文件与基因组对齐,为了快速对齐,我有一个python脚本,它在目录中循环,只选择某些文件。我使用了subprocess,如果我不是在循环中运行它的话,我会将所有的东西都包含在bash脚本中。问题是我想并行运行它,但是在子流程中使用$NSLOTS不起作用 我的bash脚本如下所示: #!/bin/bash --login #$ -cwd #$ -pe smp.pe 8 #specifies to use 8 cores module load apps/binapps/ana

我想将一些fasta文件与基因组对齐,为了快速对齐,我有一个python脚本,它在目录中循环,只选择某些文件。我使用了subprocess,如果我不是在循环中运行它的话,我会将所有的东西都包含在bash脚本中。问题是我想并行运行它,但是在子流程中使用$NSLOTS不起作用

我的bash脚本如下所示:

#!/bin/bash --login
#$ -cwd
#$ -pe smp.pe 8 #specifies to use 8 cores

module load apps/binapps/anaconda3/2019.03  #Python 3.7.3
module load apps/bioinf
module load apps/star/2.5.3a/gcc-4.8.5

python STAR_aligner.py
import subprocess
import os

directory = '/mnt/fls01-home01/mfbx3sgh/scratch/Trimming'
genome_idx = '/mnt/fls01-home01/mfbx3sgh/scratch/Genome_Index'
genome_dir = '/mnt/fls01-home01/mfbx3sgh/scratch/Genome/'

file_list = os.listdir(directory)

for read_1 in file_list:

    if 'paired' in read_1:

        if '_1_' in read_1:

            read_2 = read_1.replace('_1_', '_2_')

            subprocess.run(['STAR', '--runThreadN', '$NSLOTS', '--genomeDir', genome_idx, '--readFilesIn', read_1,
                            read_2, '--readFilesCommand', 'gunzip', '-c', '--outFileNamePrefix', genome_dir])
我的python脚本如下所示:

#!/bin/bash --login
#$ -cwd
#$ -pe smp.pe 8 #specifies to use 8 cores

module load apps/binapps/anaconda3/2019.03  #Python 3.7.3
module load apps/bioinf
module load apps/star/2.5.3a/gcc-4.8.5

python STAR_aligner.py
import subprocess
import os

directory = '/mnt/fls01-home01/mfbx3sgh/scratch/Trimming'
genome_idx = '/mnt/fls01-home01/mfbx3sgh/scratch/Genome_Index'
genome_dir = '/mnt/fls01-home01/mfbx3sgh/scratch/Genome/'

file_list = os.listdir(directory)

for read_1 in file_list:

    if 'paired' in read_1:

        if '_1_' in read_1:

            read_2 = read_1.replace('_1_', '_2_')

            subprocess.run(['STAR', '--runThreadN', '$NSLOTS', '--genomeDir', genome_idx, '--readFilesIn', read_1,
                            read_2, '--readFilesCommand', 'gunzip', '-c', '--outFileNamePrefix', genome_dir])
如您所见,我指定在bash脚本中使用8个核心,然后在稍后的子进程位中调用$NSLOTS,当不在python脚本中时,它将与指定的核心一起工作

我得到的错误是

EXITING: fatal input ERROR: runThreadN must be >0, user-defined runThreadN=0

Sep 30 11:52:24 ...... FATAL ERROR, exiting

Python脚本似乎根本没有增加任何价值,您应该将其全部作为Bash脚本编写

#/bin/bash
root=“/mnt/fls01-home01/mfbx3sgh/scratch”
对于“$root/TRIMP/”中的read_1*;做
案例$read_1 in
*配对*1_*|*1_*配对*)
STAR--runThreadN“$NSLOTS”-genomeDir“$root/Genome_Index/”\
--ReadFiles位于“$read_1”“${read_1//\u 1/\u 2}”\
--readFilesCommand gunzip-c——outFileNamePrefix“$root/Genome/”;;
以撒
完成
如果您的问题是如何正确使用Python中的
$NSLOTS
,那将是

os.environ['NSLOTS']

(字符串
“$NSLOTS”
只是静态字符串
$
N
S
等)。

什么是
NSLOTS
?它设置在什么地方了吗?我猜可能应该引用
“gunzip-c”
作为单个参数?在Python中这样说的方式很简单,就是
'gunzip-c'
!非常有用的回答,我对使用bash还不熟悉,所以这就是为什么我使用python循环,但是您的bash建议使一切变得更容易,并且正在工作,请参见