我目前有这段代码(也可以随意评论:))
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
中答案 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使用情况。这只是我的猜测,所以如果有人有更好的解释,我很感兴趣。