【问题标题】:Proper way to execute ProcessingPools in sequence按顺序执行ProcessingPools的正确方法
【发布时间】:2017-03-10 21:36:30
【问题描述】:

我正在使用 pathos.multiprocessing 库(因为我的工作方法中包含 lambda),并且正在尝试按顺序运行两个 ProcessingPool。

例如:

from pathos.multiprocessing import ProcessingPool
pool=ProcessingPool(nodes=2)
res=pool.map(workerFunc,workerArgList)
pool.close()
pool.join()
# ...
pool=ProcessingPool(nodes=2)
res=pool.map(workerFunc2,workerArgList2)
pool.close()
pool.join()

代码在第二个 pool.map() 的 pool.py 的 map() 函数中返回 AssertionError(在 assert self._state == RUN 处)。每个池独立工作正常。看来,由于某种原因,在第二次初始化中,池的状态设置为 TERMINATE 而不是 RUN。我应该如何初始化第二个池(或终止第一个池)以获得所需的行为?或者这是我偶然发现的某种错误?

谢谢! 安德鲁

【问题讨论】:

    标签: python multiprocessing pool


    【解决方案1】:

    根据official Python Documentation on Pool.map()

    它阻塞直到结果准备好。

    换句话说,pool.map() 在所有处理完成之前不会返回结果。使用pool.map()时,不需要每次都运行pool.close()pool.join(),只需在使用完pool后执行一次即可。

    【讨论】:

    • 谢谢维托。我需要这个已经有一段时间了,所以我找到了一个不同的解决方案。我认为这并不能解释 AssertionError,因为第一个池运行并成功关闭,但我会尝试做一个简单的示例来验证。
    猜你喜欢
    • 2013-11-10
    • 2019-02-24
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2023-01-17
    相关资源
    最近更新 更多