在我的python代码中,我使用了抓取python lib并尝试在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脚本, 和我的名称!='主要'。 在第一个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
答案 0 :(得分:0)
如果进程并行运行,那么您的RAM可能确实不足。打开任务管理器或其等效项,并在运行时检查总分配的内存。
答案 1 :(得分:0)
我找到了使用python进程设置内存限制的良好命令
ulimit -s 2000