2017-04-01 98 views
-1

我正在运行使用共享主机上的多处理池共享的脚本。我收到以下错误:多处理。池内存分配错误

Errno 12] Cannot allocate memory 
(<type 'exceptions.OSError'>, 

下面是我的代码:

with closing(Pool(processes=50)) as pool: 
csv_items = pool.map(get_stuff, list_ids) 
pool.terminate() 
pool.join() 
+3

这听起来像是你的内存不足。我不知道我们能为此提供多少帮助。也许可以尝试让你的池拥有更少的进程(通常没有太多的好处,比你的CPU有更多的内核)。 – Blckknght

+0

@Blckknght托管服务提供商的某种限制,因为我的Mac本地没有这样的问题 – Volatil3

回答

1

好吧,你都争相推出50多个进程通过您的池使用。现在,这与线程不同,它将启动50个新的Python进程,并包含所有的Python模块和库。

默认情况下,Pool将启动cpu_count()新进程,通常用于multicpu多核机器。现在,每个新的工作进程默认都会在整个池的工作队列中持续存在。如果我将使用一个专用的VPS实例,我将采取谨慎措施,在我的池中免费创建工作进程。在你的情况下,你正在使用共享主机,在这方面,内存限制会更大,显示你在上面看到的错误信息。

如果您想使用此功能,请将您的部署从共享主机更改为专用vps /云实例。

+1

感谢您的回复,或将进程数量减少到2或3? – Volatil3

+1

减少到2或3 ...并尝试在此之后逐一增加,直到错误再次启动。如果2失败,那么你的共享主机限制了所有这些,多进程python将无法工作,你将需要迁移到专用的vps。 –