プログラミング初心者です。
pythonで並列処理をしたいのですが、
高速化できる方法はないでしょうか?
処理1:データの取得
処理2:データの処理
処理1でデータ保存し続け、処理2の方で随時処理したい。
私はconcurrent.futuresを使いました。
import time import concurrent.futures def func1(): while True: print("func1") time.sleep(1) def func2(): while True: print("func2") time.sleep(1) if __name__ == "__main__": executor = concurrent.futures.ThreadPoolExecutor(max_workers=2) executor.submit(func1) executor.submit(func2)
もっと高速化できる手法やこういったデータ保存と処理の並列に適切な処理はないでしょうか?
宜しくお願い致します。
※質問を追記します。
ざっくりした質問で失礼いたしました。
■処理1:Arduinoからデータを受け取り、xにデータを格納し続ける
ser = serial.Serial('COM4', 9600) str = ser.readline() x.append(str)
■処理2:上記xから随時データを取り出し、処理する
i = 0 while True: if x[i] > 10: print("aaa") i += 1 ``` 本コードなら処理1→処理2を連続しても処理時間に影響ないと思いますが、 あくまで処理1と処理2を並列して実施したい次第です。 何卒宜しくお願い致します。
ざっくりしすぎていてなんとも言えません。たとえば、取得と処理が一対一で実行されるものなら取得してから処理するまでを一つのワーカーにまかせて並列化することを考えたほうが効率がいいと思いますし、いくつか取得してまとまったデータを一度に処理するなら別のやり方を考える必要があります。あるいはFIFOキューなど外部のミドルウェアを使って実行する方法もあります。どのような方法を取るかはやりたいこと次第です。
データの取得、データの処理がそれぞれ具体的にどのようなもので、どこがボトルネックになるのか、どこを並列化できるのか等がわかると回答がつきやすいと思います
"time.sleep(1)"のような意味のない時間待ちをやめると1桁以上の高速化が期待できます。