我需要将非常大的dask.bag
元素提交给非线程安全商店,即我需要类似
for x in dbag:
store.add(x)
我不能使用compute
,因为包很大,以适应内存。
我需要更像distributed.as_completed
的东西,但它适用于行李,distributed.as_completed
没有。
答案 0 :(得分:1)
我可能会继续使用普通计算,但添加一个锁
def commit(x, lock=None):
with lock:
store.add(x)
b.map(commit, lock=my_lock)
您可以在哪里创建threading.Lock
或multiprocessing.Lock
,具体取决于您正在进行的处理类型
如果您想使用as_completed,您可以将行李转换为期货并在其上使用as_completed。
from distributed.client import futures_of, as_completed
b = b.persist()
futures = futures_of(b)
for future in as_completed(futures):
for x in future.result():
store.add(x)
你也可以转换为数据帧,我相信它会更明智地迭代
df = b.to_dataframe(...)
for x in df.iteritems(...):
...