Если обязательно использовать Python, то я бы взял gevent и urllib2. Вместо использования HEAD (который многие серверы не понимают) советую просто не скачивать тело ответа.
Вот тут пример есть
https://github.com/surfly/gevent/blob/master/examp... но он совсем уж простой - на практике лучше иметь пул из ограниченного числа гринлетов.
Ну и строчку
data = urllib2.urlopen(url).read()
нужно заменить на
resp = urllib2.urlopen(url)
print resp.getcode()
resp.close()
Чтоб только заголовки качать, без тела.
Насчёт keep-alive лучше не заморачивайтесь, это экономия на спичках (если только у вас не все запросы к одному серверу)
Twisted лучше не смотрите - это безперспективняк =)