[英]python multiprocessing pool, make one worker to execute a different function
[英]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.