2013-12-04 5 views
0

В моем питона коде я использую захватить питона LIB и попытаться открыть 3 сайта в õpe питона скриптPython процессов и «не удалось выделить память»

Мой текущий код:

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

Но я решил, что мне лучше открыть все соединения за одно и то же время (нет ожиданий, когда сайт «a» будет загружен перед открытым сайтом «b»). И я попытался сделать процессы:

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 и «не может выделить память», когда я пытаюсь запустить его процессами для каждого запроса на сайт?

Действительность Я уже использую процесс питона для запуска этого питона скрипт, и мое имя ! = «главный». В первом питона (который запустить этот скрипт) Я использую этот код:

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

Я добавил полный TraceBack – SPnova

0

Я нашел хорошую команду для заданного предела памяти, используя для питона процессов

ulimit -s 2000 
Смежные вопросы