Python 函数具有大量参数的情况下的多处理
关于如何在multiprocessing的process pool或joblib中实现/调用具有长范围参数的函数的任何想法,其中两个或三个参数会随着每次迭代而改变,其余参数保持不变 下面是循环(我需要并行运行):请注意这里的idx、string和secondaryf仅用于更改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
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)