Parallel processing Python中函数内部的并行处理

Parallel processing Python中函数内部的并行处理,parallel-processing,multiprocessing,python-3.6,Parallel Processing,Multiprocessing,Python 3.6,30行X算法 在这段代码中,我想并行化代码片段: for r in list(X[c]): solution.append(r) cols = select(X, Y, r) for s in solve(X, Y, solution): yield s deselect(X, Y, r, cols) 我做了一个函数: def ParallelCode(X,Y,r,s

30行X算法

在这段代码中,我想并行化代码片段:

for r in list(X[c]):
            solution.append(r)
            cols = select(X, Y, r)
            for s in solve(X, Y, solution):
                yield s
            deselect(X, Y, r, cols)
我做了一个函数:

def ParallelCode(X,Y,r,solution)
            print("Hello")
            solution.append(r)
            cols = select(X, Y, r)
            for s in solve(X, Y, solution):
                yield s
            deselect(X, Y, r, cols)
            solution.pop()
            solution.pop()
那就这样说吧

if not X:
      yield list(solution)
  else:
      c = min(X, key=lambda c: len(X[c]))
      processes = [multiprocessing.Process(target=ParallelCode, args=(X, Y,r,solution)) for r in list(X[c])]

       for p in processes: 
            p.start()

       for p in processes:
           p.join()


当我运行代码时,它不工作。我在并行代码中打印“Hello”,即使“Hello”也不打印。你能帮我看看这个密码有什么问题吗

ParallelCode
的调用未运行该函数。而是返回一个生成器对象。移除yield,或者包装函数,使其调用生成器,然后返回


如果我理解正确,
解决方案
参数在您的案例中充当累加器。无法从多处理返回值。相反,将其作为参数使用并传递,并让新进程将结果写入其中

我想有两个问题。打印可能会失败,具体取决于标准输出的指向位置(尝试写入文件并刷新)。您实际上并没有运行该进程。您的函数返回一个生成器,但不执行任何操作。谢谢。我会让你知道结果的。让我使用队列重试。
if not X:
      yield list(solution)
  else:
      c = min(X, key=lambda c: len(X[c]))
      processes = [multiprocessing.Process(target=ParallelCode, args=(X, Y,r,solution)) for r in list(X[c])]

       for p in processes: 
            p.start()

       for p in processes:
           p.join()