在后台启动并等待多个作业启动

用户名

我想一次启动多个10个作业,然后等待它们完成,然后在后台并行启动10个以上的作业,重复此操作,直到完成所有100个作业。

这是调用shell脚本的python代码

from subprocess import call

# other code here.

# This variable is basically # of jobs/batch.
windowsize = 10

# Here is how I call the shell command. I have 100 jobs in total that I want as 10 batches with 10 jobs/batch.
for i in range (0..100) :
   numjobs = i + windowsize

   # Start 10 jobs in parallel at a time 
   for j in range (i..numjobs) :
       call (["./myscript.sh", "/usr/share/file1.txt", ""/usr/share/file2.txt"],   shell=True)

   # Hoping that to wait until the 10 jobs that were recently started in background finish.
   call(["wait],shell=True)

在我的shell脚本中,我有这个

#!/bin/sh

# I start the job in background. Each job takes few minutes to finish.

shell command $1 $2 &
...

不幸的是,所有100个作业都已启动,而不是10个批次/批次的10个批次。

杰夫斯

没有(直接)等待孙子进程的方法。而是waitmyscript.sh脚本末尾添加

要限制并发运行的子进程的数量,可以使用线程池:

#!/usr/bin/env python
import logging
from multiprocessing.pool import ThreadPool
from subprocess import call

windowsize = 10
cmd = ["./myscript.sh", "/usr/share/file1.txt", "/usr/share/file2.txt"]

def run(i):
    return i, call(cmd)

logging.basicConfig(format="%(asctime)-15s %(message)s", datefmt="%F %T",
                    level=logging.INFO)
pool = ThreadPool(windowsize)
for i, rc in pool.imap_unordered(run, range(100)):
    logging.info('%s-th command returns %s', i, rc)

注意:shell=True已删除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在后台启动Skype

来自分类Dev

php在后台启动过程,并等待它完成

来自分类Dev

在后台启动詹金斯

来自分类Dev

如何在后台启动Deluge?

来自分类Dev

在后台启动linux进程

来自分类Dev

在后台启动C程序

来自分类Dev

在后台启动功能并保存PID

来自分类Dev

如何在后台启动phantomjs?

来自分类Dev

在后台启动应用程序

来自分类Dev

在Windows 8.1的后台启动多个程序

来自分类Dev

游戏无法检查条件并在后台启动

来自分类Dev

在后台启动过程并检索输出

来自分类Dev

在后台启动Flask服务器

来自分类Dev

鱼壳如何在后台启动进程的PID

来自分类Dev

如何在后台启动BREW应用程序?

来自分类Dev

如何在后台启动PhantomJS + Selenium窗口?

来自分类Dev

GeniusesOfSymfony / WebSocketBundle在后台启动服务器

来自分类Dev

Bash流程-重新附加流程在后台启动

来自分类Dev

如何在后台启动BREW应用程序?

来自分类Dev

在后台启动时执行python脚本

来自分类Dev

检测到iBeacon时在后台启动App

来自分类Dev

在后台启动时耗电的任务

来自分类Dev

进程在后台启动之前被杀死

来自分类Dev

GeniusesOfSymfony / WebSocketBundle在后台启动服务器

来自分类Dev

使用`&`在后台启动命令,并使其在脚本中消失

来自分类Dev

在后台启动 /usr/bin/mysqld_safe

来自分类Dev

在后台启动进程,执行任务,然后在后台终止进程

来自分类Dev

在嵌入式Linux上启动后自动在后台启动Java应用程序

来自分类Dev

如何在OSX系统启动时在后台启动虚拟机?