2014-07-03 2 views
-2

Использование Python 2.7 У меня есть этот код:питон многопроцессорная бассейн замерзает

import urllib2 
import time 
import os 
import sys 
import multiprocessing 
from multiprocessing import Pool 
WORKER_COUNT = 10 

def worker(url): 
    print url 
    try: 
     response = urllib2.urlopen(url) 
     html = response.read() 
    except Exception as ex: 
     pass 

if __name__ == "__main__": 
    urls = [ 
     'http://localhost:90/', 
     'http://localhost:90/Default.aspx', 
     'http://localhost:91/?a=2&m=0', 
     'http://localhost:91/?a=2&m=1', 
     'http://localhost:91/?a=2&m=2', 
     'http://localhost:91/?s=2', 
     'http://localhost:91/?a=2&ft=false', 
     'http://localhost:91/?a=2&f=false', 
     'http://localhost:91/?fail=1', 
     'http://localhost:91/?fail=query', 
     'http://localhost:92/?a=2&m=0', 
     'http://localhost:92/?a=2&m=1', 
     'http://localhost:92/?a=2&m=2', 
     'http://localhost:92/?s=2' 
     ] 
    while True: 
     p = Pool(WORKER_COUNT) 
     p.map(worker, urls[0:4])# too many urls will cause it to freeze up 
     print "Restart" 
     time.sleep(5) 

, когда я использую все URLs (там может быть 30 URLs), она замерзает после запуска через первый набор. Когда я использую 5 URL-адресов, как в приведенном выше коде (url [0: 4]), он не замерзает. Любые идеи, почему? Код - это тестовый код, поэтому он должен работать вечно (в течение нескольких часов).

+0

Вы не должны воссоздать объект 'Pool' внутри цикла while. Создайте его снаружи. – dano

ответ

0

ОПС, эта проблема не была связана с бассейном. Это некоторые из ссылок, которые замерзают. я установил его, добавив таймаут:

import socket 
try: 
    response = urllib2.urlopen(url, timeout=10) 
    html = response.read() 
except socket.timeout: 
    print "timout" 
    pass 

быть также известно, что использование слишком большого количества рабочих приведет к приложению замерзают из-за нехватки ресурсов.

Смежные вопросы