2016-01-27 2 views
2

У меня есть некоторые задачи рейка, которые нужно запускать каждый час примерно, каждый из них должен связаться с веб-сайтом, загрузить файл и импортировать файл в свой db.Оптимизация потоков задач рейки Ruby

Мне было интересно, какой лучший подход будет с точки зрения эффективности и скорости выполнения. Правильно ли, если я думаю, что создание потока для каждой задачи поможет мне немного времени? Поступая таким образом, я должен иметь возможность минимизировать время ожидания ответа сервера на самое медленное из потоков.

После загрузки файлов я думал об использовании gem "parallel" для импорта данных в db из больших файлов csv и xml.

Пожалуйста, дайте мне знать, если у вас есть предложения.

+0

Сколько файлов есть? Загружаете ли вы все файлы в одну задачу или имеете много задач? – Vasfed

+0

На данный момент у меня есть 3 задачи и 3 файла для загрузки из 3 разных веб-сайтов. Каждая задача имеет свой файл для загрузки и импорта. – Jack

ответ

2

Когда количество таких файлов невелико, вам не нужно выполнять заказ и может позволить себе дополнительную память. Самое простое решение - просто запустить их в разных процессах cron (например, gem 'whenever').

Если вы более - использовать некоторые HTTP драгоценные камни для параллельной загрузки - typhoeus, curb, em-http-request и т.д.

+0

Все в порядке, даже если файлы довольно большие и требуют много времени для обработки? С большим я имею в виду около 20 тыс. Строк csv-файлов, которые нужно разобрать и сопоставить с моделью. – Jack

+0

@ Если вы выберете отдельный процесс - тогда проблем нет, только имейте в виду, что импорт может работать параллельно. – Vasfed

+0

Я попробую этот подход, спасибо за ваше время! – Jack

Смежные вопросы