RapGenius отправил this article о том, как они проверили все URL-адреса 170 тыс., Которые указывали на них, путем parellizing задачи очистки на рабочих динамиках на Heroku с использованием библиотеки Ruby Typhoeus.Распараллеливание Python в базу данных по всему Heroku
Я работаю над проектом, который включает в себя очищение (получение источника) для 1,5 миллионов URL-адресов, и я пытался ускорить его. Будучи более комфортным с Python, мне удалось взломать скребок, который распараллеливается на моем рабочем столе, используя redis и многопроцессорность python. Там, где я смущен, я должен изменить его, чтобы работать на Героку.
Вот как моя программа рассчитана прямо сейчас:
1) Сценарий инициализации работает, который хранит все адреса загодя в очереди Redis
2) сценарий, run_workers.py, работает , что запускает все процессы, как, например:
workers = []
q = get_redis_queue(name)
for i in xrange(num_workers):
p = multiprocessing.Process(target=worker.scraper_worker, args=(i, q))
p.start()
workers.append(p)
for w in workers:
w.join()
3) Рабочие, в worker.py, что делать выскабливание задача, как это:
def scraper_worker(worker_id, queue):
#consumes URL from redis queue, visits using python requests
#stores result into MySQL
Может ли моя текущая структура программы быть перенесена непосредственно на Heroku? Что бы я добавил в Procfile? Моя первая догадка будет
scrape: python init_scrape.py
Где init_scrape.py первым инициализирует очередь, затем запускает рабочий. Но у меня нет опыта, фактически распространяющего задачу python на облаке, и я хочу избежать дорогостоящих ошибок.
Выполнение этого локально, я нахожу, что хранение результатов непосредственно в базе данных (у которой есть 1,5 миллиона строк, для каждого URL-адреса и пустое место для кэширования), каждый запрос UPDATE выполняется медленно (требуется минут). Лучше ли хранить результаты во временной таблице, а затем объединить эти две таблицы позже?
Какие технологии я не использую, что я должен быть? Например, я видел, как сельдерей и скрининг упоминаются как подходящие кандидаты для такого рода вещей. Я тоже не знаком, но я видел как предлагаемые альтернативы в периферийном googling.