from gevent import monkey; monkey.patch_all()
from gevent import spawn, sleep, joinall
from gevent.queue import Queue
from gevent.pool import Pool
def scrape(url):
return data
def fetch(url, queue):
queue.put(scrape(url))
def start(urls, queue):
pool = Pool(size=20)
joinall([pool.spawn(fetch, url, queue) for url in urls])
def main_loop():
urls = get_urls_from_db()
queue = Queue(maxsize=20)
tasks = spawn(start, urls, queue)
write_tasks = []
while not g.ready() or not queue.empty():
result = queue.get()
write_tasks.append(spawn(write_into_db, result))
sleep(0)
joinall(write_tasks)
2. по идее валидатор должен быть отдельным методом или классом вне текущего класса, архитектурно правильнее так сказать. тогда тестировать намного проще.
3. приватные методы неявно переименовываются. ABC.__foo в ABC._ABC__foo