powershell - 从 powershell 函数调用多个 Azure 函数
问题描述
我有一个简单的 powershell 编排器,它只读取一个文本文件并发送部分列表以在 functionA 上处理。
$payLoad = Get-Content tracks.txt
[int]$itemCount = $payLoad.Count / 50
for ($i = 0; $i -le $payLoad.Count; $i++) {
$payloadList += $payLoad[$i]
if ($payloadList.Count -eq $itemCount) {
Write-Host $payloadList
Start-ThreadJob -Argumentlist $payloadList -Scriptblock {
# Here I am filling urls etc.
Invoke-RestMethod @params
}
$payloadList = @()
}
}
我在列表中有近 1000 个项目,但始终只处理大约 200 个。我可以从协调器日志中看到,powershell 线程作业是为所有人创建的,但我的大部分作业在某处消失了。Azure 函数是否不支持这种调用函数的方式,或者我哪里出错了?
解决方案
我不太明白第一部分。您是否尝试一次处理 50 个项目?
块的典型结构Start-ThreadJob
看起来更像这样:
# Divide $payloads into chunks of 50
$script:counter = 0
$payloads = Get-Content tracks.txt | Group-Object {[math]::Floor($script:counter++/50)}
# Process each job on separate threads (default throttle limit is 5)
# Save job IDs to $jobs
$jobs = $payloads | Foreach {
Start-ThreadJob -ThrottleLimit 5 -ArgumentList $_.Group -ScriptBlock {
Invoke-RestMethod @params
}
}
# specifically, wait for all jobs to finish, and get their output:
$result = $jobs | Wait-Job | Receive-Job
您也可以$jobs
自行运行以查看各个状态。或者,进行详细测试:
while ($jobs.count -gt ($jobs|? state -eq 'Completed').count) {
Write-Progress -Activity 'Processing jobs' -PercentComplete (
[math]::Round((($jobs|? state -eq 'Completed').count/$jobs.count)*100))
}
Write-Output "all jobs complete"
你能看到$jobs
节目是否创造了所有 20 个工作岗位,它们的状态如何?
推荐阅读
- docker - 复制失败:未指定源文件
- azure - Azure B2C - JWT 客户端断言自定义异常消息
- apache-kafka - 无法在kafka中永久保存消息
- angular - Angular routerLink relative to a variable route parameter
- javascript - 对 WebStorm 中的标记区域使用 ESLint 修复
- visual-studio-extensions - Microsoft.VisualStudio.SDK + Microsoft.VisualStudio.Debugger.Interop.Internal = 错误
- c++ - 带有 boost 线程库的 Cmake
- phalcon - 文件上传不起作用或在 phalconphp 中有一些问题
- java - 我无法从 C++ 程序运行可执行 jar
- reactjs - 如何在 react-bootstrap-table2 中将嵌套的 json 传递给 BootstrapTable