O gevent / request trava ao fazer muitos pedidos de cabeçalho

Preciso fazer 100k pedidos de cabeça e estou usando o gevent em cima de pedidos. Meu código é executado por um tempo, mas depois trava. Não sei por que está pendurado ou se está pendurado em solicitações ou eventos. Estou usando o argumento timeout dentro de request e gevent.

Dê uma olhada no meu snippet de código abaixo e deixe-me saber o que devo alterar.

import gevent
from gevent import monkey, pool
monkey.patch_all()
import requests

def get_head(url, timeout=3):
    try:
        return requests.head(url, allow_redirects=True, timeout=timeout)
    except:
        return None

def expand_short_urls(short_urls, chunk_size=100, timeout=60*5):
    chunk_list = lambda l, n: ( l[i:i+n] for i in range(0, len(l), n) )
    p = pool.Pool(chunk_size)
    print 'Expanding %d short_urls' % len(short_urls)
    results = {}
    for i, _short_urls_chunked in enumerate(chunk_list(short_urls, chunk_size)):
        print '\t%d. processing %d urls @ %s' % (i, chunk_size, str(datetime.datetime.now()))
        jobs = [p.spawn(get_head, _short_url) for _short_url in _short_urls_chunked]
        gevent.joinall(jobs, timeout=timeout)
        results.update({_short_url:job.get().url for _short_url, job in zip(_short_urls_chunked, jobs) if job.get() is not None and job.get().status_code==200})
    return results 

Eu tentei grequests, mas ele foi abandonado e eu passei pelas solicitações pull do github, mas todos eles também têm problemas.

questionAnswers(2)

yourAnswerToTheQuestion