Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Joblib并附加到列表_Python_List_For Loop_Append_Joblib - Fatal编程技术网

Python Joblib并附加到列表

Python Joblib并附加到列表,python,list,for-loop,append,joblib,Python,List,For Loop,Append,Joblib,我正在尝试使用Joblib来并行化代码中的一些计算。以下是我目前掌握的情况: data = {'tag': [], 'radials': []} def append_radials(*args): for tag in range(len(sacla_tags)): det_data = get_detdata_for_single_tag(sacla_tags[tag], beamline, run) radial_profile = np.arra

我正在尝试使用Joblib来并行化代码中的一些计算。以下是我目前掌握的情况:

data = {'tag': [], 'radials': []}

def append_radials(*args):
    for tag in range(len(sacla_tags)):
        det_data = get_detdata_for_single_tag(sacla_tags[tag], beamline, run)
        radial_profile = np.array(profiler.get_mean_profile(det_data))
        data['radials'].append(radial_profile)
        data['tag'].append(sacla_tags[tag])

args = [sacla_tags, beamline, run, profiler]
Parallel(n_jobs=5, verbose=50)(delayed(append_radials)(*args) for i in range(5))
简而言之,
append_radials
函数收集一些数据,将其放入
radial_profile
行,然后将输出附加到
数据
字典。这是在一个非常大的数据集上迭代,大约需要15分钟才能完成。我想使用joblib来加快速度

按照编写代码的方式,它循环遍历每个作业中的每个标记(
len(sacla_tags)=5000
)。相反,我希望它将标记拆分为5个不同的作业(每个作业1000个标记),然后将输出附加到全局字典
data

这可能吗?我做错了什么


编辑:

下面是我的代码的一个简单示例

def f(i): 
     dat = [] 
     q = i**2 * np.sqrt(i**(3/2)) 
     dat.append(q) 
     return dat 

x = np.linspace(1,10000000,1000000)
p = Parallel(n_jobs=5, verbose=50)(delayed(f)(x) for j in range(5))
p
的输出如下:

In [37]: p                                                                                                                     
Out[37]: 
[[array([1.00000000e+00, 7.30854392e+02, 4.32617501e+03, ...,
         1.77826963e+19, 1.77827452e+19, 1.77827941e+19])],
 [array([1.00000000e+00, 7.30854392e+02, 4.32617501e+03, ...,
         1.77826963e+19, 1.77827452e+19, 1.77827941e+19])],
 [array([1.00000000e+00, 7.30854392e+02, 4.32617501e+03, ...,
         1.77826963e+19, 1.77827452e+19, 1.77827941e+19])],
 [array([1.00000000e+00, 7.30854392e+02, 4.32617501e+03, ...,
         1.77826963e+19, 1.77827452e+19, 1.77827941e+19])],
 [array([1.00000000e+00, 7.30854392e+02, 4.32617501e+03, ...,
         1.77826963e+19, 1.77827452e+19, 1.77827941e+19])]]
p
中的每个数组都是相同的长度,joblib没有分割范围。相反,它运行了五次

我知道这是一些基本概念,我对joblib的工作原理还不太了解,但我该如何告诉它,例如,将
x
分成5个块,并并行运行它们