Solicitações Python com multithreading

Eu tenho tentado criar um raspador com funcionalidade multithreading nos últimos dois dias. De alguma forma eu ainda não conseguia. No começo, tentei uma abordagem multithreading regular com o módulo threading, mas não foi mais rápido do que usar um único thread. Mais tarde, aprendi que os pedidos estão bloqueando e a abordagem multithreading não está realmente funcionando. Então eu continuei pesquisando e descobri sobre grequests e gevent. Agora estou executando testes com o gevent e ainda não é mais rápido do que usar um único thread. Minha codificação está errada?

Aqui está a parte relevante da minha turma:

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()

questionAnswers(1)

yourAnswerToTheQuestion