Python 将此代码并行化

Python 将此代码并行化,python,multithreading,parallel-processing,multiprocessing,concurrent.futures,Python,Multithreading,Parallel Processing,Multiprocessing,Concurrent.futures,我试图找出如何并行化下面的代码。 我已经查找了joblib、concurrent.futures和多处理模块,但我一辈子都无法通过阅读文档和搜索SO/google了解它们是如何工作的 Grid是一个定义了适当方法的类对象,它与循环的处理顺序无关 def ProcessGrid(Grid): #Parallel This Loop for i in range(len(Grid)): Grid[i].AdjustCostMultiplier() Gr

我试图找出如何并行化下面的代码。 我已经查找了
joblib
concurrent.futures
多处理
模块,但我一辈子都无法通过阅读文档和搜索SO/google了解它们是如何工作的

Grid
是一个定义了适当方法的类对象,它与循环的处理顺序无关

def ProcessGrid(Grid):
    #Parallel This Loop
    for i in range(len(Grid)):
        Grid[i].AdjustCostMultiplier()
        Grid[i].FindAllNeighbours(Grid)
        print("Processing Grid Cell: " + str(i) + " of " + str(len(Grid)),end = "\r")
    #Return to serial
    return Grid

您可以像这样使用线程库:

import threading

def process(grid, i):
    grid[i].AdjustCostMultiplier()
    grid[i].FindAllNeighbours(Grid)
    print("Processing Grid Cell: " + str(i) + " of " + str(len(grid)), end = "\r")

def ProcessGrid(Grid):
    threads = []
    for i in range(len(Grid)):
        t = threading.Thread(target=process, args=(Grid, i))
        t.start()
        threads.append(t)
    for t in threads:
        # Wait for all threads to finish
        t.join()
    #Return to serial
    return Grid

process()
将在每次迭代的新线程中调用
t.join()
然后等待线程完成。

是否要将ProcessGrid方法并行调用两次?或者您想调用AdjustCostMultiplier()和FindAllNeighbours()?我想并行化for循环,我将编辑我的问题以反映“do X for me”请求的澄清(很难将它们描述为“问题”),在这里,如果不至少显示您自己的努力,就无法得到良好的响应——不仅仅是声称您已经尝试过,但实际上是以a的形式显示您编写的代码,并描述它是如何失败的。好的,我添加了一个答案。我没有测试它,但它应该可以工作:)不幸的是,由于全局解释器锁,Python多线程在CPU受限的情况下不能使代码更快。多道处理确实使它更快,但它需要更多的努力。他要求将它并行化。他从未要求把代码写得更快。此外,如果涉及等待进程,多线程也可以使代码更快。t是“非类型”时有一些问题(我想是因为没有返回语句吧?),但我刚刚注释掉了join语句,它对我的caseoops很好,很抱歉我修复了它。我将.start()存储到t中,而不是线程本身。只需移动t.start()进入下一行。@Maarten_vd_Sande并行化可以使代码更快,如果(a)它不是CPU绑定的,或者(b)它是CPU绑定的。但是大部分工作是在C扩展库中进行的,这些扩展库为主要操作(如numpy)释放GIL,或者(C)它在无GIL的Python解释器(如Jython)中运行。