Windows 8.1上的Python多处理池只产生一个工作线程

时间:2014-02-21 16:11:58

标签: python multiprocessing pool

我目前有这段代码(也可以随意评论:))

def threaded_convert_to_png(self):
    paths = self.get_pages()
    pool = Pool()
    result = pool.map(convert_to_png, paths)
    self.image_path = result

在英特尔i7上,它在Linux上运行时会产生八名工作人员;但是,在运行Windows 8.1 Pro时,它只会生成一个工作程序。我检查过,cpu_count()在Linux和Windows上都返回8。

  • 我在这里缺少什么,或者做错了什么?
  • 有没有办法解决这个问题?

P.S。这是在Python 2.7.6

2 个答案:

答案 0 :(得分:1)

有一种简单的方法可以确定池中发生的事情 - 打开多处理调试。 你可以这样做:

import logging
from multiprocessing import util

util.log_to_stderr(level=logging.DEBUG)

在脚本运行时,您将获得有关正在运行,生成和退出的进程的完整信息。

但无论如何,进程池总是产生N个进程(其中N是“进程”参数值或cpu_count),但进程之间的任务分配可能不均匀 - 这取决于任务运行时间。

答案 1 :(得分:1)

我设法解决了我的类似问题。我不确定它对你有帮助,但我决定在这里记录它,以防它帮助某人。

在我的情况下,我通过将它们分成多个处理器来分析大量的推文(总共52000个)。它在OSX和服务器上运行良好,但在我的Windows 8.1上,它非常慢,并且按顺序激活了进程。通过查看任务管理器,我注意到主要的Python进程的内存使用率上升到1.5Gb左右。工人进程的内存使用率同样攀升。现在我注意到我的旧版本工作正常,算法略有不同。最后问题是我从数据库中检索了整个推文,而我只需要推文的文本部分。这显然导致了内存使用量的增长。在我修复了那个部分之后,该程序正确启动了工作进程。

基于我的经验,我有一种预感,即Windows试图通过阻止工作进程来控制ram的使用。如果是这样,请检查进程的ram使用情况。这只是我的猜测,所以如果有人有更好的解释,我很感兴趣。