Solicitudes de Python con subprocesos múltiples

He estado tratando de construir un raspador con funcionalidad de subprocesos múltiples en los últimos dos días. De alguna manera todavía no podía manejarlo. Al principio probé un enfoque de subprocesamiento múltiple regular con el módulo de subprocesos, pero no fue más rápido que usar un solo subproceso. Más tarde, supe que las solicitudes están bloqueando y el enfoque de subprocesos múltiples no funciona realmente. Así que seguí investigando y descubrí grequests y gevent. Ahora estoy ejecutando pruebas con gevent y todavía no es más rápido que usar un solo hilo. ¿Mi codificación es incorrecta?

Aquí está la parte relevante de mi clase:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta