gevent / request bleibt hängen, während viele Kopfanfragen gestellt werden

Ich muss 100.000 Kopfanforderungen stellen, und ich verwende gevent zusätzlich zu den Anforderungen. Mein Code läuft eine Weile, hängt dann aber irgendwann. Ich bin mir nicht sicher, warum es hängt oder ob es innerhalb von Anfragen oder Ereignissen hängt. Ich verwende das Timeout-Argument in beiden Anfragen und in gevent.

Bitte schauen Sie sich mein Code-Snippet unten an und lassen Sie mich wissen, was ich ändern soll.

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 

Ich habe Grequests ausprobiert, aber es wurde aufgegeben, und ich habe die Github-Pull-Anfragen durchlaufen, aber alle haben auch Probleme.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage