Python-Anforderungen mit Multithreading

Ich habe in den letzten zwei Tagen versucht, einen Scraper mit Multithreading-Funktionalität zu erstellen. Irgendwie konnte ich es immer noch nicht schaffen. Zuerst habe ich einen regulären Multithreading-Ansatz mit Threading-Modul versucht, der jedoch nicht schneller war als die Verwendung eines einzelnen Threads. Später erfuhr ich, dass Anfragen blockieren und Multithreading-Ansatz nicht wirklich funktioniert. Also recherchierte ich weiter und erfuhr von Grequests und Gevents. Jetzt führe ich Tests mit gevent durch und es ist immer noch nicht schneller als die Verwendung eines einzelnen Threads. Ist meine Codierung falsch?

Hier ist der relevante Teil meiner Klasse:

import gevent.monkey
from gevent.pool import Pool
import requests

gevent.monkey.patch_all()

class Test:
    def __init__(self):
        self.session = requests.Session()
        self.pool = Pool(20)
        self.urls = [...urls...]

    def fetch(self, url):

        try:
            response = self.session.get(url, headers=self.headers)
        except:
            self.logger.error('Problem: ', id, exc_info=True)

        self.doSomething(response)

    def async(self):
        for url in self.urls:
            self.pool.spawn( self.fetch, url )

        self.pool.join()

test = Test()
test.async()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage