Я пытаюсь создать скребок с многопоточной функциональностью за два дня. Почему-то я все еще не мог справиться с этим. Сначала я попробовал обычный многопоточный подход с модулем потоковой передачи, но он был не быстрее, чем с использованием одного потока. Позже я узнал, что запросы блокируются, а многопоточный подход не работает. Поэтому я продолжал исследовать и узнавать о греках и gevent. Теперь я запускаю тесты с gevent, и это все еще не быстрее, чем использование одного потока. Неправильно ли мое кодирование?
Вот соответствующая часть моего класса:
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()