@FubiraiHan

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

並列処理で定期的にフィードバックを行うループを作る方法

Q&A

Closed

解決したいこと

pythonで並列処理を書きたいと思っています。
処理Aと処理Bがあり、処理AはBよりも100倍くらい処理時間が遅いです。
今処理Bを無限ループさせている間にAを定期的に実行してAの処理結果をBにフィードバックさせたいです。

#こんなイメージ
B -> B -> B -> B -> B -> B-> B-> B
          │              │ 
A ────────┘ A ───────────┘A ────── 
#これが無限に続く

共有メモリにAの処理完了フラグを作って、「Aを実行する関数」と「処理完了フラグが立つまでBを無限ループする関数」を並列処理してjoinするのを無限に繰り返す、というやり方も考えたのですが、もっといい方法がすでにある気がしています。
もっと簡単なやり方があれば教えていただきたいです。

0 likes

1Answer

処理Bをwhile True: ...で普通に無限ループさせつつ、100倍遅いとされる処理Aをmultiprocessingで処理させます。

multiprocessingである必要はなく、threadingでもconcurrent.futures.ProcessPoolExecutorでもお好きな方法でさばけば良いと思います。

フィードバックについては処理Aをクラス化するなりして、処理A終了後に処理Aのクラスプロパティから引っ張ってくるなどは思いつきます。或いはキューでプロセス間通信を行う。

並列処理してjoin

threadingなのかmultiprocessingなのかは分かりませんが、join()すると処理待ちが発生して無限ループが一時停止に陥ります。


その「やり方も考えた」コードがあれば何とか言い様はありますが、物が全くないのにこれ以上は応えられません。
それとPythonの並列処理についてよく学習なって下さい。

0Like

Comments

  1. @FubiraiHan

    Questioner

    ありがとうございます
    Queueで変数伝達をやってみようと思います。

Your answer might help someone💌