用Python多处理对象/函数替换Bash&/GNU屏幕?

用Python多处理对象/函数替换Bash&/GNU屏幕?,python,multiprocessing,Python,Multiprocessing,有没有办法编写一个python脚本来模拟GNU屏幕和Bash的使用?我最初试图编写一个简单的Bash脚本,但我怀疑学习多处理模块会给我带来一点灵活性,更不用说python模块的文档记录非常好 因此,我在教程和文档中看到了单个函数并行运行的用法,但是我对如何使用它有点迷茫。任何参考资料都会非常有用 下面是我想要的: 如果我在不同的python文件中进行了大量实验,那么在Bash中: $python experiment1.py& $python experiment2.py& ..

有没有办法编写一个python脚本来模拟GNU屏幕和Bash的使用?我最初试图编写一个简单的Bash脚本,但我怀疑学习
多处理
模块会给我带来一点灵活性,更不用说python模块的文档记录非常好

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

下面是我想要的:

如果我在不同的python文件中进行了大量实验,那么在Bash中:

$python experiment1.py&
$python experiment2.py& ...
在Python中,如果我在同一个脚本中有一组函数,main将模拟上述情况(这实际上只是一个猜测,并不意味着我的无知会冒犯别人):


除了OSX上的活动监视器之外,我不知道该如何测试,因为它似乎没有告诉我内核的分布情况,所以建议在不运行时的情况下检查python会很有帮助。最后一个问题可能过于笼统,但我想我会把它加进去。谢谢你的帮助

以下程序并行运行一组脚本。对于每一个,它在开始和结束时都会打印一条消息。如果退出时出现错误,将打印错误代码和命令行,程序将继续

它在系统中每个CPU一次运行一个shell脚本

来源 输出
python:无法打开文件'blam':[Errno 2]没有这样的文件或目录
开始:['python','bum']
错误:{'status':2,'command':['python','blam']}
完成
开始:['python','zhello.py']
完成
['howdy\n',无]

您所说的“模拟<代码>屏幕”到底是什么意思?如果你真的想做你所说的,那将是一大堆的
诅咒
代码…但是在bash会话中似乎没有任何
屏幕
相关的东西,只有基本的作业控制。另外,当你说“我不确定如何测试这个”…测试什么,确切地说?由于您的函数只返回一个您忽略的值,所以没有什么需要测试的。写一些至少能做一些琐碎事情的东西,而且很容易测试。(但是……您试过运行这个吗?因为我很确定您将在
mp.process
上遇到异常,因为该模块中没有太多名称……)您提供的脚本类似于您在其中包含的两个bash命令,即函数
experiment1
experiment2
将在两个单独的进程中并发运行,相同的方式
exeriment1.py
experiment2.py
将作为两个单独的进程并发运行。我不确定在使用
多处理
作为替代品方面,这是否就是您想要的一切。@abarnert我的意思是通过分离异步运行许多不同的函数。我有这个,GNU的并行看起来不错,但我们学校系统的核心没有。基本的python 2.7发行版附带了Linux上的
多处理
@Charlie,它通过分叉异步运行一系列函数,但是是的,
多处理
做到了这一点。天哪!谢谢你,沙文沃瑟!非常感谢!尤其是CPU的打印输出和Python测试!祝你有一个美好的星期天,我希望因果报应!嘿,沙文沃瑟爵士,我遇到了这个问题,不知道你是否知道如何解决它。诚然,我不使用
子流程
,我想知道您是否知道这些实现是否确实有助于解决这个问题。我真的不明白,我正在拼命地修复它。非常感谢。
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()
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
['howdy\n', None]