在无尽循环中并行运行多个python脚本(使用PowerShell)

时间:2019-12-19 10:01:27

标签: python powershell parallel-processing

我有七个python脚本,它们全部基于MSSQL服务器上的某些信息来操纵文件夹系统中的某些文件。编写代码的方式是脚本一旦完成就应该重新启动。此外,脚本应并行运行。只要它们一次又一次地执行,顺序就没有关系(也就是说,如果脚本1(读取文件)无休止地运行,而脚本7(删除已读取的所有文件)从未执行,则顺序会很糟糕。但是,在脚本7运行一次之前,是否多次运行脚本1都没有关系。

到目前为止,我已经找到了使用PowerShell的解决方案。我有7个单独的PowerShell脚本(process1.ps1, process2.ps1, ..., process7.ps1),其外观如下:

while($true)
{
    $i++
    Start-Process -NoNewWindow -Wait python F:\somewhere\something.py
    Start-Sleep -Seconds 10
}

如果我打开7个不同的PowerShell控制台并像这样在每个控制台中启动一个.ps1,此方法将起作用:

& "F:\PowerShellScripts\process1.ps1"

但是,每次打开和监视七个会话都很麻烦。有没有办法一口气启动所有这些过程,但仍然确保它们正确并行化?

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式在Powershell中并行化命令:

为了最简单的使用,请接受工作(我为您提供的建议)。为了获得最佳性能,请使用运行空间。我还没有尝试过工作流程。

工作入门:

$scriptpaths = "C:\temp\1.py", "C:\temp\2.py"
foreach ($path in $scriptpaths){
    start-job -ScriptBlock {
        Param($path)
        while($true)
        {
            Start-Process -NoNewWindow -Wait python $path
            Start-Sleep -Seconds 10
        }
    } -ArgumentList $path
}

但是请务必阅读文档,此代码远非理想。另外,此代码不会同步您的脚本。如果一个运行速度比其他运行速度快,则它们将失去同步。