Python Multiprocessing Object/Function 取代 Bash &/GNU Screen?



是否有一种方法可以编写一个python脚本来模拟GNU Screen和Bash的使用?我最初试图写一个简单的Bash脚本,但我怀疑学习multiprocessing模块会给我一点灵活性,更不用说python模块有很好的文档。

所以,我在教程和文档中看到了并行运行单个函数的使用,但是我对如何使用它有点迷路。任何参考资料都会非常有帮助。

下面就是我想要的:

如果我在不同的python文件中有一堆实验,那么在Bash中:

$python experiment1.py&
$python experiment2.py& ...

在Python中,如果我在同一个脚本中有一堆函数,则main会模拟上面的(?这只是一个猜测,我无意冒犯别人(我的无知除外):

import multiprocessing as mp
def experiment1():
    """run collection of simulations and collect relevant statistics"""
    ....
def experiment2():
    """run different collection of simulations and collect relevant statistics""" 
    ....
if __name__ == '__main__':
    one = mp.process(target = experiment1)
    two = mp.process(target = experiment2)
    ...
    one.start()
    two.start()
    ...
    one.join()
    two.join()

我不确定我将如何测试这个,除了可能我的OSX上的活动监视器,这似乎没有告诉我内核的分布,所以建议检查python没有运行时将是有帮助的。最后一个问题可能太笼统了,但我还是想把它插进去。谢谢你的帮助!

下面的程序并行运行一堆脚本。对于每个任务,它在开始和结束时打印一条消息。如果它以错误退出,则打印错误代码和命令行,并继续执行程序。

每次在系统的每个CPU上运行一个shell脚本。

import multiprocessing as mp, subprocess
def run_script(script_name):
    curproc = mp.current_process()
    cmd = ['python', script_name]
    print curproc, 'start:', cmd
    try:
        return subprocess.check_output(
            cmd, shell=False)
    except subprocess.CalledProcessError as err:
        print '{} error: {}'.format(
            curproc, dict(
                status=err.returncode,
                command=cmd,
            )
        )
    finally:
        print curproc, "done"
scripts = ['zhello.py', 'blam']
pool = mp.Pool()   # default: num of CPUs
print pool.map(
    run_script, scripts,
)
pool.close()
pool.join()

输出
python: can't open file 'blam': [Errno 2] No such file or directory
<Process(PoolWorker-2, started daemon)> start: ['python', 'blam']
<Process(PoolWorker-2, started daemon)> error: {'status': 2, 'command': ['python', 'blam']}
<Process(PoolWorker-2, started daemon)> done
<Process(PoolWorker-1, started daemon)> start: ['python', 'zhello.py']
<Process(PoolWorker-1, started daemon)> done
['howdyn', None]

最新更新