dataList
(たとえば[(1, globalDict), (2, globalDict), (3, globalDict)]
)に変数を重複して渡すことを避け、代わりにそれらをグローバルに使用したいと考えています。ただし、次のコードではglobal globalDict
を解決する方法はありません。マルチプロセッシングとプールを使用しているときに、どのようにグローバル変数にアクセスできますか?
マルチプロセス機能のデータにグローバルにアクセスする簡単な方法はありますか?
私は、次のhereをお読みください。
「通信が高価なスレッド間の通信とは対照的に 、プロセス間でデータをやり取りすることははるかに高価であるPythonでは、データが前にバイナリ形式に漬けています。したがって、通信のオーバーヘッドは、タスクが小さい場合には非常に大きくなる可能性があります。無駄なコストを削減するには、チャンク内のタスクをより適切に割り当てる必要があります。
ここに該当するかどうかはわかりませんが、どの場合でもデータアクセスを簡素化したいと思います。
def MPfunction(data):
global globalDict
data += 1
# use globalDict
return data
if __name__ == '__main__':
pool = mp.Pool(mp.cpu_count())
try:
globalDict = {'data':1}
dataList = [0, 1, 2, 3]
data = pool.map(MPfunction, dataList, chunksize=10)
finally:
pool.close()
pool.join()
pool.terminate()
のWindowsを
任意のunixyシステムはこのように非常に異なっている(つまり、エラーを発生させるものだならば、あなたが悪いのプールオブジェクトを参照しないように余談として、プールを作成した後try
ブロックを開始) 。あなたはどちらを使いますか? – tdelaneyUnix、Python 2.7 – Phillip