/ / Pythonのマルチプロセッシングから出力を取得するにはどうすればよいですか? -python

Pythonのマルチプロセッシングから出力を取得する方法 - python

だから、PythonのMultiprocessingモジュールを使用して1つのルーチンを高速化しようとしています。ジョブをいくつかのコアに分割することで、いくつかの.csvファイルを読み取れるようにしたいのです。

def csvreader(string):

from numpy import genfromtxt;

time,signal=np.genfromtxt(string, delimiter=",",unpack="true")
return time,signal

次に、この関数を次のように呼び出して呼び出します。

if __name__ == "__main__":
for i in range(0,2):
p = multiprocessing.Process(target=CSVReader.csvreader, args=(string_array[i],))
p.start()

問題は、これが出力を保存しないことです。 私はすべてのフォーラムをオンラインで読んでおり、multiprocessing.queueを使用する方法があるかもしれないことを見ましたが、私はそれをよく理解していません。 簡単で簡単な方法はありますか?

回答:

回答№1は2

あなたの最善の策は multiprocessing.Queue または multiprocessing.Pipe、この問題のために正確に設計されています。これらを使用すると、プロセス間で安全かつ簡単にデータを送信できます。

の出力を返したい場合 csvreader 関数、別の引数を渡す必要があります multiprocessing.Queue これを介してデータがメインプロセスに送り返されます。の代わりに return値を入力してキューに配置し、メインプロセスは後でそれらを取得します。プロセスがそれらを取得しようとするときに準備ができていない場合、デフォルトでは、それらが利用可能になるまでブロック(待機)します。

関数は次のようになります。

def cvsreader(string, q):
q.put(np.genfromtxt(string, delimiter=",", unpack="true"))

メインルーチンは次のとおりです。

if __name__ == "__main__"
q = multiprocessing.Queue()
for i in range(2):
p = multiprocessing.Process(target=csvreader, args=(string_array[i], q,))
p.start()

# Do anything else you need in here

time=np.empty(2,dtype="object")
signal=np.empty(2,dtype="object")
for i in range(2):
time[i], signal[i] = q.get() # Returns output or blocks until ready
# Process my output

あなたが電話する必要があることに注意してください Queue.get() ために 返品したいアイテム。

のドキュメントをご覧ください multiprocessing モジュール その他の例と情報については。


回答№2の場合は0

の例を使用する ドキュメントの紹介

if __name__ == "__main__":
pool = Pool(2)
results = pool.map(CSVReader.csvreader, string_array[:2])
print(results)