前提・実現したいこと
I/Oバウンドな処理を高速化したいのですがCPU使用率を100%まで引き出すことができないためmultiProcessingなどを検討しているのですが他にどのようにGILロックを回避する方法がありますか?
cycleでイテレータを使用して実行するごとにリストから順番に実行しているのでできればデータ共有を行いたいです。
現在は以下のようなコードを使用しています(以下は形のみのサンプルです)
#1がfor文でリストを回してThreadをスタートさせています。
#2がイテレータを使用してThreadへの引数はなしで実行するごとにnextでリストを回しています。
このようにリストを順番に実行するという処理をCPU100%になるまで最高速に動作させたいです。
該当のソースコード
Python3
1#1 2def t(i): 3 print(i) 4 #実際はここにI/Oバウンドな処理 5 6for i in list: 7 Thread(target=t, args=(i, )).start() 8 9#2 10list = cycle(list) 11 12def t(): 13 i = next(list) 14 print(i) 15 #実際はここにI/Oバウンドな処理 16 17while True: 18 Thread(target=t).start() 19
試したこと
下のイテレータを使用したバージョンでmultiProcessingを使用しましたがデータの共有がされないためイテレータのnextが効かなかったため使えませんでした。
データの共有が可能であればできそうではあります。