だから私のコードでは、私はこのようなものがあります:マルチプロセッシングを使用してHDF5ファイルに書き込む方法は?
import tables
import bson
def proc():
data = bson.decode_file_iter(open('file.bson'), 'rb'))
atom = tables.Float64Atom()
f = tables.open_file('t.hdf5', mode='w')
array_c = f.create_earray(f.root, 'data', atom, (0, m))
for c,d in enumerate(data):
for e,p in enumerate(d['id']):
x = some_array1bym()
array_c.append(x)
f.close()
これは正常に動作しますが、私はマルチプロセッシングでこれを右にしたいが、私はこれに新しいですから、私は私が見つけた、まさにこれを行う方法を知りません
def proc():
NCORE = 6
data = bson.decode_file_iter(open('file.bson'), 'rb'))
atom = tables.Float64Atom()
f = tables.open_file('t.hdf5', mode='w')
array_c = f.create_earray(f.root, 'data', atom, (0, m))
def process(q, iolock):
while True:
d = q.get()
if d is None:
break
for e, p in enumerate(d['id']):
x = some_array1bym()
array_c.append(x)
q = mp.Queue(maxsize=NCORE)
iolock = mp.Lock()
pool = mp.Pool(NCORE, initializer=process, initarg=(q,iolock))
for c,d in enumerate(data):
q.put(d)
for _ in range(NCORE):
q.put(None)
pool.close()
pool.join()
f.close()
これは私に空のファイルを与えます。
誰でも手伝いできますか?
ありがとう!
: * HDF5はデータベースではありません私は何をする必要がありますが、次のようなものにあなたの
process
機能を変更することだと思います。追記型、読み込み型のデータセットに最適です。ファイルはいつでもファイルに追加できますが、複数のライターが同時にそのようにすると、ファイルが破損する可能性があります。* – hoeflingあなたのサンプルを実行できないため、何がうまくいかないかを正確に伝えるのは難しいです。おそらく、 'data'と' some_array1bym'を適切なプレースホルダに置き換えて、他のユーザがあなたのコードをテストできるようにすることができます。 – myrtlecat