Próbowałem zbudować skrobak z funkcją wielowątkowości ostatnich dwóch dni. Jakoś wciąż nie mogłem sobie z tym poradzić. Najpierw próbowałem regularnego podejścia wielowątkowego z modułem wątków, ale nie był szybszy niż przy użyciu pojedynczego wątku. Później dowiedziałem się, że żądania są blokowane, a wielowątkowość nie działa tak naprawdę. Tak więc kontynuowałem badania i dowiedziałem się o podbojach i geenie. Teraz mam testy z geventem i nadal nie jest to szybsze niż użycie pojedynczego wątku. Czy moje kodowanie jest złe?Żądania python z wielowątkowością
Oto odpowiednia część mojej klasy:
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()
Gdzie jest twój import? Czy próbowałeś także modułu 'multiprocessing'? – Will
Dodałem import. Przepraszam, nie sądziłem, że będzie to konieczne. Nie próbowałem wieloprocesowości, ale dlaczego gevent nie miałby działać? – krypt
Nie ma problemu! Spróbuj zmienić 'gevent.monkey.patch_all()' na 'gevent.monkey.patch_all (httplib = True)'. Jeśli to pomoże, wyjaśnię to. – Will