- Регистрация
- 22.03.2012
- Сообщения
- 2 406
- Благодарностей
- 1 473
- Баллы
- 113
Привет, комрады. Есть пару вопросов по параллельным запросам.
Есть список, без файла, куда мы раннее напарсили ссылок на картинки.
Код в цикле хорошо сохранял изображения, но последовательно. Называя их по счетчику от 1 и... пока не надоест. Так сотню изображений сохраняет минут 3-5.
Картинки грузятся с разных сайтов, никаких лимитов на запросы выходит что нет, не долго думая решил замутить System.Threading.Tasks.Parallel.ForEach , спасибо Третьему конкурсу статей и LexxWork
Код индусский, может и хуже, делал для теста. Скорее всего все вообще не верно
~Первый вопрос вообще банальный, да и ошибка очевидна — при параллельном скачивании как организовать счетчик, чтоб на выходе получить имена картинок 1,2,3... ? Только рандомные имена выйдет сделать?
~Я так понимаю, этот ForEach грузит все что в списке одновременно? А чтоб, допустим, загружать в 50 threadов, не разбивая на подсписки — нужно использовать "Parallel.For"?
Есть список, без файла, куда мы раннее напарсили ссылок на картинки.
Код в цикле хорошо сохранял изображения, но последовательно. Называя их по счетчику от 1 и... пока не надоест. Так сотню изображений сохраняет минут 3-5.
Картинки грузятся с разных сайтов, никаких лимитов на запросы выходит что нет, не долго думая решил замутить System.Threading.Tasks.Parallel.ForEach , спасибо Третьему конкурсу статей и LexxWork
Код:
int count = 1;
var list = project.Lists["Image"].ToList();
System.Threading.Tasks.Parallel.ForEach(list, p => {
var pic = project.Lists["Image"];
project.Variables["IMAGE_TEMP_SAVE_VAR"].Value = pic[0];
pic.RemoveAt(0);
//Парсим расширение картинки
var type ="";
type = Regex.Match(project.Variables["IMAGE_TEMP_SAVE_VAR"].Value, "\\.[a-z]{2,5}$").Value;
//Если картинка без расширения, ставим своё
if (type == "" )
{
type = ".jpg";
}
//Сохраняем картинку, в этом страхе просто URL и место сохранения
ZennoPoster.ImageProcessingUntreatedFromUrl(project.Variables["IMAGE_TEMP_SAVE_VAR"].Value, project.Directory+"\\Images\\"+project.Variables["IMAGE_KEYWORD_LAT"].Value + "\\"+ count + type);
//Увеличиваем счетчик
count++;
}
);
~Первый вопрос вообще банальный, да и ошибка очевидна — при параллельном скачивании как организовать счетчик, чтоб на выходе получить имена картинок 1,2,3... ? Только рандомные имена выйдет сделать?
~Я так понимаю, этот ForEach грузит все что в списке одновременно? А чтоб, допустим, загружать в 50 threadов, не разбивая на подсписки — нужно использовать "Parallel.For"?