【问题标题】:Python multiprocessing loses activity without exiting filePython 多处理在不退出文件的情况下失去活动
【发布时间】:2020-01-31 04:18:11
【问题描述】:

我的 .py 文件(通过多处理使用最大 CPU)在不退出 .py 文件的情况下停止运行。

我正在执行一项繁重的任务,该任务使用旧 MacBook Pro(2012 年)中的所有内核。该任务一开始运行良好,我可以直观地看到四个 python3.7 任务填充了活动监视器窗口。然而,大约 20 分钟后,这四个 python3.7 从 Activity Monitor 中消失了。

最奇怪的部分是多处理 .py 文件仍在运行,即它从未抛出未捕获的异常或退出文件。

你们对发生了什么有什么想法吗?我的猜测是 1) 很可能是脚本出错,2) 旧电脑过热。

谢谢!

编辑:下面是多进程代码,其中要执行的多进程函数是 func,其参数是一个列表。我希望这会有所帮助!

import multiprocessing

def main():
    pool = multiprocessing.Pool()
    for i in range(24):
        pool.apply_async(func, args = ([], ))
    pool.close()
    pool.join()

if __name__ == '__main__':
    main()

【问题讨论】:

  • 您需要编辑您的问题并添加您正在使用的代码,否则我们将无法提供帮助,因为有多种方法可以设置多处理。
  • @MyNameIsCaleb,感谢您的提醒 - 附件是多处理代码。我对这个概念还是陌生的。
  • 我添加了一个可能会解决您的问题的答案。由于您删除了一些您实际在做的事情(函数),所以我也保留了它的通用性。

标签: python python-3.x macos unix multiprocessing


【解决方案1】:

使用上下文管理器正确处理关闭进程。

from multiprocessing import Pool

def main():
    with Pool() as p:
        result = p.apply_async(func, args = ([], ))
        print(result)

if __name__ == '__main__':
    main()

我不确定你对 for i in range() 部分做了什么。

【讨论】:

  • 感谢您的回复。如果运行,它似乎只有一个进程。我想尽可能多地与 list 参数并行运行 func (列表内容通过随机化每次运行而变化)。我放for循环的原因是多次调用apply_async来锻炼更多的处理器。
  • 如果你想使用更多的处理器,你可以使用Pool(5) 或类似的方法来设置你想要的进程数。
  • 就随机性和这个列表参数而言,如果没有在您的代码中进一步说明您的意思,我将很难回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2014-12-10
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多