使用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)
当我使用所有网址(可能有30个网址)时,它会在通过第一套网格后冻结。 当我使用上面代码中的5个url(url [0:4])时,它不会冻结。 有什么想法吗? 代码是一个测试代码,因此它应该永远运行(几个小时)。
答案 0 :(得分:0)
ops,此问题与Pool无关。 它冻结了一些网址。 我通过添加超时来修复它:
import socket
try:
response = urllib2.urlopen(url, timeout=10)
html = response.read()
except socket.timeout:
print "timout"
pass
另请注意,使用过多的工作人员会导致应用程序因资源不足而冻结。