Cで実装された特定のPython関数(file.read()が含まれていると思います)は、動作中にGILを解放し、完了時に元に戻すことができることを読みました。そうすることで、複数のコアを利用できます。再利用可能。
マルチプロセスを使用してコードを並列化しています。現在、親、ファイルからデータを読み取る子、最初の子プロセスから渡されたデータからチェックサムを生成する子の3つのプロセスがあります。
この権利を理解していれば、現在行っているようにファイルを読み取るための新しいプロセスを作成する必要はないようです。メインプロセスで呼び出す必要があります。問題は、私がこの権利を理解しているかどうか、そして読み取りをメインプロセスまたは別のプロセスに保持することでパフォーマンスが向上するかどうかです。
したがって、処理するデータを読み取ってパイプ処理する関数を指定すると、次のようになります。
def read(file_path, pipe_out):
with open(file_path, 'rb') as file_:
while True:
block = file_.read(block_size)
if not block:
break
pipe_out.send(block)
pipe_out.close()
これは間違いなく複数のコアを利用すると思いますが、オーバーヘッドも発生します。
multiprocess.Process(target=read, args).start()
しかし今、これを行うだけで、オーバーヘッドを除いた複数のコアも使用されるのではないかと思います。
read(*args)
どちらがより速く、どのような理由で誰もが持っている洞察は大いにありがたいです!