お世話になっております。
引数にx,y,zを持つ関数A(x,y,z)を複数同時に実行したいと考えております。
ここで、以下のように辞書入りのリストBがあり、
B=[{x:1,y:2,z:3},{x:4,y:5,z:6},{x:7,y:8,z:9}]
このBから関数Aへ引数x,y,zを渡したうえで、上記の例でいう3並列で同時実行したいと思っています。
ここで悩ましいのが、もしBの要素数(=辞書数)が毎回3個と固定であれば、関数をA1,A2,A3と別で記載しておき、
executor = concurrent.futures.ThreadPoolExecutor(max_workers=3) executor.submit(A1) executor.submit(A2) executor.submit(A3)
というようにかけるので同時実行ができる気がするのですが、Bの要素数が状況により変化する状況です。
そのため、
executor = concurrent.futures.ThreadPoolExecutor(max_workers=3) for i in B: executor.submit(A(**i))
というような書き方しかできないのでは?と思っており、これでは同時実行になっておりません。
(Bの一つ目の辞書を読んでAを処理し、それが終わってから次の辞書を読み込み・・・という動きにしかならない)
https://www.delftstack.com/ja/howto/python/parallel-for-loops-python/
を見るとfor文の並列実施という記事があるのですが、よくわかってないのですが、concurrent.futuresを使うのがよろしい、という記事を多数見るので二の足を踏んでいる状況です。
何か他に良いほうはございますでしょうか?
(全く見当違いのことを言っていたら大変恐縮です。)
因みに関数Aはseleniumによるブラウザ操作になり、Bがキーボード入力をする際のパラメータになります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/28 14:25