多处理时同一循环/迭代多次运行

2024-09-28 17:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里,我不确定我对joblib的错误是什么,循环运行2倍的时间(同一个迭代被多次调用(两次),这是不需要的)。主函数(words_2)有很多参数,所以我使用了functools的partial。如果你需要words_2 function,我可以把它贴出来。这是一个很长的函数。你知道吗

words_2(string, folder, 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时,我想补充的另一件事是,它是这样工作的,但是我需要实现多处理。你知道吗

Parallel(n_jobs=1, verbose=50)(delayed(words_2_partial)(string=sentence, folder=sf) for sentence in sep[0:1] for sf in folder[0:1])
Parallel(n_jobs=1, verbose=50)(delayed(words_2_partial)(string=sentence, folder=sf) for sentence in sep[1:2] for sf in folder[1:2])
Parallel(n_jobs=1, verbose=50)(delayed(words_2_partial)(string=sentence, folder=sf) for sentence in sep[2:3] for sf in folder[2:3])

代码如下:

if __name__ == '__main__':

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

    folder = [os.makedirs(os.path.join("my_fo", str(idx))) for idx, string in enumerate(sep) if not os.path.exists(os.path.join("my_fo", str(idx)))]
    print folder # ['my_fo\\0', 'my_fo\\1', 'my_fo\\2']

    # I am using functools's partial since only string and folder are arrays.
    words_2_partial = partial(words_2,\
                              fontface=fontface,\
                              fontface_italic=fontface_italic,\
                              number_of_lines=2,\
                              highlight=highlight,\
                              highlight_color=highlight_color,\
                              font_color=font_color,\
                              key_color=key_color,\
                              first_key=10,\
                              second_key=10,\
                              third_key=10,\
                              stroke_color=stroke_color,\
                              stroke_width=stroke_width,\
                              txt_under_color=txt_under_color
                              )


    # Now calling joblib...
    Parallel(n_jobs=len(sep), verbose=50)(delayed(words_2_partial)(string=s, folder=sf) for s in sep for sf in folder)

Tags: keyinforstringstrokemysffolder