Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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 函数具有大量参数的情况下的多处理_Python_Multiprocessing_Joblib - Fatal编程技术网

Python 函数具有大量参数的情况下的多处理

Python 函数具有大量参数的情况下的多处理,python,multiprocessing,joblib,Python,Multiprocessing,Joblib,关于如何在multiprocessing的process pool或joblib中实现/调用具有长范围参数的函数的任何想法,其中两个或三个参数会随着每次迭代而改变,其余参数保持不变 下面是循环(我需要并行运行):请注意这里的idx、string和secondaryf仅用于更改 sep = ['These limits may help reduce', 'though not completely eliminate', 'alcohol related risks'] for idx, st

关于如何在multiprocessing的process pool或joblib中实现/调用具有长范围参数的函数的任何想法,其中两个或三个参数会随着每次迭代而改变,其余参数保持不变

下面是循环(我需要并行运行):请注意这里的idx、string和secondaryf仅用于更改

sep = ['These limits may help reduce', 'though not completely eliminate', 'alcohol related risks']

for idx, string in enumerate(sep):

    print "working on", string
    base_dir = os.path.dirname(os.path.realpath(__file__))
    folder = os.path.join(base_dir, folder)
    secondaryf = os.path.join(folder, str(idx))
    print "making", secondaryf

    if not os.path.exists(secondaryf):
        os.makedirs(secondaryf)

    number_of_lines = countlines2(string)

    words_2(string, secondaryf, fontface, fontface_italic, 
            number_of_lines, highlight, 
            highlight_color, font_color, 
            key_color, first_key, second_key, 
            third_key, stroke_color, 
            stroke_width, txt_under_color)
我知道一点关于对多个参数使用joblib的知识,但在我的例子中,并不是所有参数都会改变。以前我在我的一个项目中使用过类似的结构(只是一个例子)


有什么建议吗?

你可以使用
functools.partial
来修复没有改变的参数:假设你有一个函数
f(a,b,c,d,e)
,你只想改变c和e。然后,您可以通过

f_partial = functools.partial(f, a=a_value, b=b_value, d=d_value)

然后,只需使用之前用于并行作业的模式。

这是否确实适用于joblib?我似乎记得有一次尝试过类似的东西,它引发了一些与pickle lambda函数或类似函数相关的错误。虽然我可能在尝试使用
多处理
,但我只是在python3.6上检查了酸洗部分对象是否有效。当然,通常不能对lambda函数进行pickle处理(因此,如果对它们进行部分处理,则不能)。
f_partial = functools.partial(f, a=a_value, b=b_value, d=d_value)