parallel-processing - 在 joblib 并行循环中从 pytables hdf5 文件中读取
问题描述
我正在努力访问 joblib 并行 for 循环中的数据。
基本思想是我想在每次迭代中从 h5 文件中加载数据,对数据做一些事情,然后保存输出。数据量太大了,内存放不下。出于这个原因,我正在考虑一种迭代方法。
我的基本示例是这样的:
import tables
import numpy as np
from joblib import Parallel, delayed
# open file
h5file = tables.open_file('file.h5','r')
# define function which I want to run in parallel
def function(i):
x = h5file.root.variable[:,i]
# do something with x, e.g.
result = np.sum(np.square(x))
return(result)
# run in parallel
results = Parallel(n_jobs=-1)(delayed(function)(i) for i in range(100))
# close file
h5file.close()
但是如果我以这种方式实现它,我会收到以下错误:“PicklingError:无法腌制任务以将其发送给工作人员。”
我真的一无所知,很高兴得到帮助。
解决方案
我弄错了:我需要在要并行化的函数中打开和关闭文件:
import tables
import numpy as np
from joblib import Parallel, delayed
# define function which I want to run in parallel
def function(i):
# open file
h5file = tables.open_file('file.h5','r')
x = h5file.root.variable[:,i]
# close file
h5file.close()
# do something with x, e.g.
result = np.sum(np.square(x))
return(result)
# run in parallel
results = Parallel(n_jobs=-1)(delayed(function)(i) for i in range(100))
推荐阅读
- javascript - 如果来自另一个数组的对象 id 值匹配,则替换数组内部的对象
- excel - 如何在多个范围内应用条件格式
- php - symfony 5 new Authenticator-based Security - createHasher() 必须是数组类型,给定对象
- ember.js - 如何从插件中的配置/环境访问 ENV?
- cuda - 仅在分配的一部分上使用 cudaHostRegister 是否安全?
- performance - 使用 GCC 覆盖检测工具编译/运行程序会消耗多少额外资源?
- python - 比较 R 和 Python 向量化和优化
- python - 烧瓶用一个列出清单
- azure - 由于方法 java.rmi.MarshalException 中的错误,无法从 azure 容器上的主节点运行 taurus 命令
- google-sheets - 仅计数一次的“COUNTUNIQUE”的正确方法