【问题标题】:How I can parallelize a 'for' loop with an external variable?如何将“for”循环与外部变量并行化?
【发布时间】:2014-07-20 12:54:27
【问题描述】:

我在并行化 new_text 为 unicode 类型的那部分代码时遇到了困难:

for old, new in self.replacements:
    line = pywikibot.replaceExcept(
        line, old, new, self.excsInside, self.site)
if new_text != entry.text:
    yield pywikibot.Page(self.site, entry.title)

使用joblibprocess-pool 看起来很容易,但是在循环之外使用了new_text。我不知道#pragama omp ordered#pragma omp atomic的等价物,因为Python没有OpenMP包装器...

如果 new_next 并行运行,我如何确定 if 语句中的值是多少?

【问题讨论】:

    标签: python python-2.7 parallel-processing pywikibot


    【解决方案1】:

    由于它本质上是顺序的,因此您可以按行并行化:

    for line in new_text
        for old, new in self.replacements:
            line = pywikibot.replaceExcept(
                line, old, new, self.excsInside, self.site)
    

    您并行化外部for 循环(映射每个替换,然后通过串联减少)。

    【讨论】:

    • 我连续尝试了你的代码(只是将它粘贴在replace.py中)...程序运行了几个小时没有任何结果,而正常完成需要40分钟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多