|
Многопоточный парсер на 1С | ☑ | ||
---|---|---|---|---|
0
adelaide
24.09.13
✎
16:10
|
Добрый день пишу обработку для парсинга сайта, не получается реализовать многопоточность, нашел одну статью на ифостарте, но не совсем понял код приведенный там.
Рассмотрим процедуру проверки списка прокси-серверов (ее тоже хочу сделать многопоточной): 1) Есть: ТЗ тзПрокси - состоит из колонок: "Сервер", "Порт", "Использовать" ПроверитьПрокси() - возвращает истина если прокси рабочий и анонимный Необходимо в несколько потоков запусить процедуру проверки прокси по тзПрокси и заполнить результатами колонку "Использовать", подскажите как сие реализовать? |
|||
1
adelaide
24.09.13
✎
16:15
|
ЧислоПараллельныхПотоков = 10;
МассивЗаданий = Новый Массив; Для каждого Стр из тзПрокси Цикл МассивПараметров = Новый Массив; МассивПараметров.Добавить(Стр.Сервер); МассивПараметров.Добавить(Стр.Порт); МассивПараметров.Добавить(Стр.Использовать); Задание = ФоновыеЗадания.Выполнить("Многопоточность.ПроверитьПрокси", МассивПараметров); МассивЗаданий.Добавить(Задание); Если МассивЗаданий.Количество() >= ЧислоПараллельныхПотоков Тогда Попытка ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий); Исключение КонецПопытки; МассивЗаданий.Очистить(); КонецЕсли; КонецЦикла; Если МассивЗаданий.Количество() > 0 Тогда Попытка ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий); Исключение КонецПопытки; МассивЗаданий.Очистить(); КонецЕсли; КонецПроцедуры |
|||
2
Maxus43
24.09.13
✎
16:16
|
создаёшь пул фоновых заданий, в каждом проверяешь конкретный прокси.
Проблема с получением результата выполнения фоновых, погугли, описано в статьях |
|||
3
adelaide
24.09.13
✎
16:16
|
(1) вот примерно так должно быть если делать по статье... вопрос, как из фонового задания получить результат и собственно пометить его в тзПрокси?
|
|||
4
Maxus43
24.09.13
✎
16:18
|
||||
5
adelaide
24.09.13
✎
16:21
|
(4) спасибо, хм, а со времен 8.1 ничего не поменялось? толко писать в базу/вызывать исключение?
|
|||
6
Maxus43
24.09.13
✎
16:22
|
(5) в 8.2 не поменялось епним, а в 8.3 незнаю
|
|||
7
adelaide
24.09.13
✎
16:28
|
(6) Нашел способ для 8.2 через ПоместитьВоВременноеХранилище, хотя по сути те же костыли, но можно добавить в книгу знаний:
http://danila.org.ua/parallelnaya-zagruzka-zagruzitbyis/ |
|||
8
Maxus43
24.09.13
✎
16:38
|
(7) да те же йайца, только сбоку
|
|||
9
adelaide
24.09.13
✎
17:58
|
(8) благодарю, вроде бы все получилось...
Еще бы теперь понять сколько будет кушать ресурсов каждый поток и определить их оптимальное число... |
|||
10
adelaide
24.09.13
✎
18:14
|
Еще вопрос, как задать время жизни рег. заданию, чтоб оно убивалось если не успело отработать за этот промежуток времени?
ИЗ СП так и не понял этом коде задания грохнутся через 20 сек или нет??: ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий, 20); |
|||
11
adelaide
24.09.13
✎
18:17
|
что-то у меня висят фоновые задания и не удаляются даже через консоль кластера :(.
|
|||
12
romix
24.09.13
✎
18:18
|
Внешние процессы можно запускать.
А по приходу файла-результата его ловить и считывать. |
|||
13
Fragster
модератор
24.09.13
✎
18:19
|
смирись
|
|||
14
adelaide
24.09.13
✎
18:21
|
(13) с чем?
(12) я над этим вариантом параллельно работаю, там как свои плюсы (меньше памяти кушает, быстрей отрабатывает..) так и свои минусы есть... |
|||
15
Serginio1
24.09.13
✎
18:27
|
А не проще использовать любые языки поддерживающие многопоточность и написать СОМ сервер?
|
|||
16
adelaide
24.09.13
✎
18:29
|
(15) смотри (14)
|
|||
17
Serginio1
24.09.13
✎
18:30
|
(14) А в чем минусы?
|
|||
18
Serginio1
24.09.13
✎
18:34
|
Если тебе нужно запустить несколько потоков а потом дождаться выполнения и выдать результат то достаточно и обычного СОМ. Если нужно возвращать результат из отличного от потока приложения, тогда нужна ВК. Которая просто делается например http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019
Исходник ВК которая загружает Объект Автоматизации поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender. |
|||
19
adelaide
24.09.13
✎
18:37
|
(18) COM не больше ресурсов будет жрать чем рег. задачи?
|
|||
20
mistеr
24.09.13
✎
18:46
|
(17) Надо что-то учить, кроме 1С
|
|||
21
Serginio1
24.09.13
✎
18:46
|
Рег задачи выполняются на сервере. Да и парсинг на 1С не сильно быстрая операция. На компилируемом языке все можно решить намного проще и быстрее. Хоть на том же C#.
А почему СОМ должен жрать больше? |
|||
22
adelaide
24.09.13
✎
18:49
|
(17) переносимость решения например
|
|||
23
adelaide
24.09.13
✎
18:53
|
(11)
Добавил на форму обработчик ожидания который проверяет сколько времени выполняется фоновая задача и если больше указанного интервала то убивает фоновую задачу, правда уже запущенные задания не завершаются :( ни программно ни через консоль сервера, в чем может быть проблема? |
|||
24
Fragster
модератор
24.09.13
✎
18:55
|
(23) прежде, чем продолжить эксперименты, рестартани сервер 1с
|
|||
25
adelaide
24.09.13
✎
18:56
|
(24) еще нельзя =)
|
|||
26
Serginio1
24.09.13
✎
18:56
|
А чем проблема переносимости?
|
|||
27
adelaide
24.09.13
✎
19:00
|
(26) ну написал я парсер на php, работает он то быстрей, 600 потоков и памяти не много жрет, но серверная часть должна на хостинге стоять + определенные параметры сервера нужны как то cURL, ну и реализовывать обмен между скриптом на php и 1С надо + еще реализовывать оповещение о ходе выполнения парсинга.
|
|||
28
Serginio1
24.09.13
✎
19:13
|
(27) Вот 600 потоков как раз и жрут ресурсы. Обычно используют пул потоков в 2 раза больше чем ядер, а то и по количеству ядер.
Про опвещение как в (1) Ты наример на C# можешь запустить потоки, дождаться их выполнения и возвратить результат. Если нужны ассинхронные сообщения то ВК |
|||
29
adelaide
24.09.13
✎
20:23
|
(28) ну в данном случае на потоки разбивается процесс получения страниц через прокси, и в парсере на пхп для запуска 600 потоков с головой хватает 200 Мб оперативной памяти и одного проца, в 1С не знаю как замерить, но думаю что надо намного больше ресурсов, но пусть даже в 30-100 потоков хочу попробовать.
C# у меня на уровне лабораторок университетских, но надо будет попробовать разобраться, думаю что использовать ВК удобней чем веб-сервис на пхп. |
|||
30
Fragster
модератор
24.09.13
✎
20:37
|
(29) есть http://infostart.ru/public/173394/
|
|||
31
Fragster
модератор
24.09.13
✎
20:38
|
еще буквально вчера появился http://www.gilev.ru/testg1c/ , сильно давит на диск
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |