我的脚本中有一点性能问题,所以我想实现某种工作方式。但到目前为止,我还没有能够找到解决的办法..powershell如何实现工作线程
什么IM希望的是这样的:
- 开始工作线程池 - 这些线程以“命令”从队列和处理它们
- 主脚本会运行
- 一旦完成主会告诉每一个线程停止
- 主要将等待所有工人退出之前结束写“命令”的队列中。
有没有人有想法如何做到这一点?
我的脚本中有一点性能问题,所以我想实现某种工作方式。但到目前为止,我还没有能够找到解决的办法..powershell如何实现工作线程
什么IM希望的是这样的:
有没有人有想法如何做到这一点?
与基思·希尔指针一些帮助 - 我得到它的工作 - 感谢一大堆...
这里是做了代码的剪断我的证明概念:
function New-Task([int]$Index,[scriptblock]$ScriptBlock) {
$ps = [Management.Automation.PowerShell]::Create()
$res = New-Object PSObject -Property @{
Index = $Index
Powershell = $ps
StartTime = Get-Date
Busy = $true
Data = $null
async = $null
}
[Void] $ps.AddScript($ScriptBlock)
[Void] $ps.AddParameter("TaskInfo",$Res)
$res.async = $ps.BeginInvoke()
$res
}
$ScriptBlock = {
param([Object]$TaskInfo)
$TaskInfo.Busy = $false
Start-Sleep -Seconds 1
$TaskInfo.Data = "test $($TaskInfo.Data)"
}
$a = New-Task -Index 1 -ScriptBlock $ScriptBlock
$a.Data = "i was here"
Start-Sleep -Seconds 5
$a
这里是结果证明该数据传送到该线程,然后再返回:
Data : test i was here
Busy : False
Powershell : System.Management.Automation.PowerShell
Index : 1
StartTime : 11/25/2013 7:37:07 AM
async : System.Management.Automation.PowerShellAsyncResult
,你可以看到现在的$ a.data前
012具有“测试”所以非常感谢...
您可以使用Powershell工作流程执行此操作。
从Windows PowerShell: What is Windows PowerShell Workflow?
工作流还可以并行执行的东西,如果你喜欢。对于 例如,如果你有一组可以按任意顺序运行的任务,没有 相互依赖关系,那么你可以让他们在或多或少 同时全部运行
只是做的“搜索Powershell工作流程“,你会发现大量的文档让你开始。
这可能是一种可能性,需要进一步调查。 – Stig
的基本方法利用职业是这样的:
$task1 = { ls c:\windows\system32 -r *.dll -ea 0 | where LastWriteTime -gt (Get-Date).AddDays(-21) }
$task2 = { ls E:\Symbols -r *.dll | where LastWriteTime -gt (Get-Date).AddDays(-21) }
$task3 = { Invoke-WebRequest -Uri http://blogs.msdn.com/b/mainfeed.aspx?Type=BlogsOnly | % Content }
$job1 = Start-Job $task1; $job2 = Start-Job $task2; $job3 = Start-Job $task3
Wait-Job $job1,$job2,$job3
$job1Data = Receive-Job $job1
$job2Data = Receive-Job $job2
$job3Data = Receive-Job $job3
如果你需要有那些后台作业的循环中,等待做工作为主脚本决定看看this SO answer,看看如何使用MSMQ来做到这一点。
你到目前为止尝试过什么?您是否调查了后台作业或运行空间池? – mjolinor
是的,我从开始工作开始,但到目前为止没有任何运气从主线传播到工作。 runspace;我看了几个例子,但它看起来非常复杂,与事件相同.. 我需要能够处理每半小时100.000个事件〜每秒95个事件 – Stig