繁体   English   中英

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

[英]Python multiprocessing Pool on Windows 8.1 spawns only one worker

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

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

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

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

PS这是在Python 2.7.6中

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

import logging
from multiprocessing import util

util.log_to_stderr(level=logging.DEBUG)

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM