我有七个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"
但是,每次打开和监视七个会话都很麻烦。有没有办法一口气启动所有这些过程,但仍然确保它们正确并行化?
答案 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
}
但是请务必阅读文档,此代码远非理想。另外,此代码不会同步您的脚本。如果一个运行速度比其他运行速度快,则它们将失去同步。