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

Windows 8.1上的Python多处理池只生成一个工作线程,python,multiprocessing,pool,Python,Multiprocessing,Pool,我目前有这段代码(也可以随意评论:)) 在英特尔i7上,它在Linux上运行时会产生8个工作进程;但是,在运行Windows 8.1 Pro时,它只生成一个工作进程。我检查并cpu\u count()在Linux和Windows上都返回8 这里有什么我遗漏的,或做错的吗 有没有办法解决这个问题 另外,在Python2.7.6中,有一种简单的方法可以确定池中发生了什么-打开多处理调试。 您可以这样做: import logging from multiprocessing import uti

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

在英特尔i7上,它在Linux上运行时会产生8个工作进程;但是,在运行Windows 8.1 Pro时,它只生成一个工作进程。我检查并
cpu\u count()
在Linux和Windows上都返回8

  • 这里有什么我遗漏的,或做错的吗
  • 有没有办法解决这个问题

另外,在Python2.7.6中,有一种简单的方法可以确定池中发生了什么-打开多处理调试。 您可以这样做:

import logging
from multiprocessing import util

util.log_to_stderr(level=logging.DEBUG)
在脚本运行时,您将获得有关进程运行、生成和退出的完整信息


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

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

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


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

Pool.\uuuu init\uuuu
调用
cpu\u count
以获取默认进程数(请参阅)。另外,
\uuuu init\uuuu
调用
\u repopulate\u池
,在该池上执行循环,生成正确数量的
进程
实例。你确定只有一个工人是繁殖?如何检查工作进程的数量?我确定,因为我只看到一个额外的python进程(转换需要很长时间)。我甚至尝试过传递
池(进程=8)
,但还是只产生了一个工作进程。尝试创建一个,例如,使用
def(path):print path,mp.current\u process()
而不是
convert\u to\u png()
,并启用日志记录
mp.log\u to\u stderr().setLevel(logging.DEBUG)
。什么是
len(路径)
?如果脚本名为“\uuuuuuu=”\uuuuuu main\uuuuuuuu“:,您是否将脚本正确地封装在
中,并且
转换为\u png
是否在其外部正确定义?(此处记录:)
import logging
from multiprocessing import util

util.log_to_stderr(level=logging.DEBUG)