在Linux上运行时,我现在有这样一段代码(随时上太评论:))Python的多池只有一个工人
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它产生八名工人;但是,运行Windows 8.1 Pro时,它只会产生一名工作人员。我在Linux和Windows上检查并且cpu_count()
返回8。
- 有什么我在这里失踪或做错了吗?
- 有没有办法解决这个问题?
P.S.这是Python 2.7.6
'Pool .__ init__'调用'cpu_count'来获取默认的进程数量(请参见[146行的Lib/multiprocessing/pool.py]](http://hg.python.org/cpython/file/ 3a1db0d2747e/LIB /多/ pool.py#L146))。另外'__init__'调用[line 159](http://hg.python.org/cpython/file/3a1db0d2747e/Lib/multiprocessing/pool.py#l159)上的'_repopulate_pool',它在[line 213]上执行一个循环, (http://hg.python.org/cpython/file/3a1db0d2747e/Lib/multiprocessing/pool.py#l213),它产生了正确数量的'Process'实例。你确定只有一名工人产卵吗?你如何检查工人数量? – Bakuriu
我确定因为我只看到一个额外的Python进程(并且转换需要时间)。我甚至尝试过传递'Pool(processes = 8)',并且只有一名工作者产生了。 – Drakkainen
尝试创建一个[最小完整代码示例,显示您的问题](http://stackoverflow.com/help/mcve)例如,使用'def f(path):print path,mp.current_process()'而不是' convert_to_png()'并启用日志记录'mp.log_to_stderr().setLevel(logging.DEBUG)'。 – jfs