- コンカレンシー制御って何?
- 変数を使うと思い通りにならない
この記事では、そんな方にコンカレンシー制御の使い方と注意点を紹介します。
この記事を読むと、ループ処理を高速化できます。
コンカレンシー制御とは
Apply to eachのループを並行処理して高速化する機能です。
処理内容によって2〜10倍ほど早くなります。
ループの基本は1つずつ順番に処理します。
Apply to eachスタート
↓
1回目ループ
↓
2回目ループ
↓
3回目ループ
・
・
終了
コンカレンシーを有りにすると、全て並行処理します。
並行処理数は1〜50で自由に設定できます。
Apply to eachスタート
↓ ↓ ↓
1回目のループ処理 2回目のループ処理 3回目のループ処理
・ ・ ・
終了
前のループが終わるのを待たないので、その分早く処理できるという理屈です。
実際にループ100回で試すと10倍ほどの差がでました。
コンカレンシー無し・・19秒
コンカレンシー有り・・2秒
実際に試した結果です。
ループ内のアクションはデータ操作の「作成」のみなので、そもそもが早いです。
ループ内に変数の処理を入れると並行処理の性能が落ちます。
効果は2倍ほどしかありません。
コンカレンシー無し・・20秒
コンカレンシー有り・・12秒
実際に試した結果です。
ループ内のアクションは変数の「配列変数に追加」のみです。
変数を使うと効果が落ちる理由は、変数のロック解除待ち時間です。
並列処理をしていても変数を同時に編集することはできません。
どこかのループが変数処理を終えるまで他のループは待機します。
ループ内容によってはほとんどが変数ロック解除待ちになり、1つずつ処理しているのと変わらない可能性もあります。
Apply to eachスタート
↓ ↓ ↓
1回目のループ処理 2回目のループ処理 3回目のループ処理
変数処理中(変数ロック) ロック解除待ち ロック解除待ち
・ ・ ・
終了
ロック機能のため、コンカレンシー制御と変数は相性が悪いです。
使い方
デフォルトはコンカレンシー制御オフなので手動でオンにします。
メニューの設定からオンに変更できます。
(1)メニューの設定を開く
Apply to eachアクションの右上にある「・・・」から設定を選択します。
(2)コンカレンシー制御をオンにする
スイッチを押して、オフからオンに変更。
(3)並列処理の次数のスライドを50へ
並列処理数を50にしたら「完了」を押して設定を終えます。
設定は以上です。フローを動かしてループが早く終わるか確認してみましょう。
次にコンカレンシー制御による問題点を説明します。
ループ内に変数がある場合の問題点
ループ内に変数アクションを入れると予定外の結果になる可能性があります。
こちら3つのどれかがあると注意です。
ループを1〜100の数字分動かして、数字を変数配列に追加していきます。
コンカレンシー無しで動かすと、1〜100が綺麗に並んでいます。
1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40_41_42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_58_59_60_61_62_63_64_65_66_67_68_69_70_71_72_73_74_75_76_77_78_79_80_81_82_83_84_85_86_87_88_89_90_91_92_93_94_95_96_97_98_99_100
コンカレンシー有りで動かすと、数字がバラバラになりました。
これは並行処理がどの順番で行われるか分からないからです。
50_7_46_15_24_29_32_41_100_96_79_91_82_3_35_31_33_74_65_81_85_83_8_30_13_37_58_53_87_18_43_20_27_14_45_48_68_63_70_80_98_64_57_95_12_21_77_62_17_19_1_93_71_69_51_10_38_5_67_60_11_61_2_25_40_88_49_90_6_26_22_39_56_55_72_89_76_42_44_36_94_75_86_28_99_78_4_92_23_34_54_47_52_97_9_84_59_73_16_66
回避策
変数ではなく定数の「作成」を使う。
データ操作の「作成」を使った場合は、コンカレンシー有りでもバラバラになりません。
コンカレンシー有りで動かした結果
1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40_41_42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_58_59_60_61_62_63_64_65_66_67_68_69_70_71_72_73_74_75_76_77_78_79_80_81_82_83_84_85_86_87_88_89_90_91_92_93_94_95_96_97_98_99_100
なぜ定数はバラバラにならないの?
と思うかもしれません。
独自に調べた結果、ループ内で定数を使った場合は、値を格納する要素数が元々のループ番号になる仕様のようです。
まとめ
PowerAutomateでコンカレンシー制御の使い方と注意点を紹介しました。
Apply to eachは使用頻度の高いアクションです。フロー作成のテストでループ時間を短縮したい方は取り入れてみてください。
PowerAutomateのおすすめ記事
人気ページ
Apply to eachの使い方
アレイのフィルター処理の使い方
日付関数の使い方
エラーを無視する方法
メールの内容をExcelへ転記
メール本文から名前を抽出
>>PowerAutomateの記事一覧を見る<<
お気に入り必須!公式ページ
Microsoft Power Automate
式関数のリファレンス
コネクタのリファレンス
Excel Online (Business)のリファレンス