Python进程和;“无法分配内存”;

Python进程和;“无法分配内存”;,python,Python,在我的python代码中,我使用抓取python库并尝试在ope python脚本中打开3个站点 我当前的代码: from grab import Grab ... g = Grab(interface=ip, headers=headers) a = g.go('http://site1.com'); g = Grab(interface=ip, headers=headers) b = g.go('http://site2.com'); g = Grab(interface=ip,

在我的python代码中,我使用抓取python库并尝试在ope python脚本中打开3个站点

我当前的代码:

from grab import Grab

...

g = Grab(interface=ip, headers=headers)
a = g.go('http://site1.com');

g = Grab(interface=ip, headers=headers)
b = g.go('http://site2.com');

g = Grab(interface=ip, headers=headers)
c = g.go('http://site3.com');
如果我运行10个python脚本,这段代码就可以正常工作

但我认为最好是同时打开所有连接(在打开站点“b”之前加载站点“a”时无需等待),我尝试了以下过程:

pa = Process(target=m_a, args=(ip))

pb = Process(target=m_b, args=(ip))

pc = Process(target=m_c, args=(ip))

pa.start()
pb.start()
pc.start()
但当我尝试运行5个以上的python进程时,我看到“无法分配内存”消息

为什么这段代码只在一个python文件中工作,而当我尝试通过进程为每个站点请求运行它时,“无法分配内存”

我已经使用python进程来运行这个python脚本, 还有我的名字main'。 在第一个python(运行此脚本)中,我使用以下代码:

if __name__ == '__main__':
    jobs = []
    for f in [exit_error, exit_ok, return_value, raises, terminated]:
        print 'Starting process for', f.func_name
        j = multiprocessing.Process(target=f, name=f.func_name)
        jobs.append(j)
        j.start()
我使用VPS OpenVZ 512

错误报告:

Process Process-18:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/root/_scripts/bf/check_current.py", line 140, in worker
    p.start()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 130, in start
    self._popen = Popen(self)
  File "/usr/lib/python2.7/multiprocessing/forking.py", line 120, in __init__
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

如果进程并行运行,那么您可能确实耗尽了RAM。打开任务管理器或其等效工具,并在运行时检查分配的总内存。

我找到了一个用于设置python进程内存限制的好命令

ulimit -s 2000  

我添加了完整的回溯