Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 10

Проблемы с многопоточностью

01.10.2012, 07:05. Показов 960. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!

Работаю в конторе, которая занимается разработкой радиоэлектроники и продажей компонентов. Начальство договорилось с одной забугорной конторой, что мы с их сайта будем брать описания микросхем и транзисторов(тех. характеристики и области применения). Впринципе, нужно просто инфу выпарсить и регулярными выражениями разделить. Все проблема в том, что там в обще сложности почти 31 000 страниц. У меня есть файл с адресами(url_c.txt). Решил все это делать через multi curl . Чтобы сильно сервер не нагружать, решил сделать так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$cook='cook.txt';
$f_g=fopen('url_c.txt', 'r');
while(!feof($f_g))
{
 $cont_of_urls1[] = trim(fgets($f_g, 4096));
}
fclose($f_g);
 
for($u=0; $u<=30; $u++)
{
    $cont_of_urls[]=$cont_of_urls1[$u]; //Это для теста, чтобы проверить 30 урлов
}
 
 
$urls=array_chunk($cont_of_urls, 10);
 
for($r=0; $r<=count($urls); $r++)
{
$mh = curl_multi_init();
for($a=0; $a<=count($urls[$r]); $a++)
{
$ch[$a] = curl_init();
curl_setopt($ch[$a], CURLOPT_URL, $urls[$r][$a]);
curl_setopt($ch[$a], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1');
curl_setopt($ch[$a], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[$a], CURLOPT_COOKIEFILE, $cook);
curl_setopt($ch[$a], CURLOPT_COOKIEJAR, $cook);
curl_setopt($ch[$a], CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch[$a], CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch[$a], CURLOPT_TIMEOUT, 60);
curl_multi_add_handle($mh, $ch[$a]);
}
do 
{
  $mrc = curl_multi_exec($mh, $active);
} while ($active>0); 
 
 
for($a=0; $a<=count($urls[$r]); $a++)
{    
   $str = @curl_multi_getcontent($ch[$a]);
   echo $str;
$ch=array();
}
curl_multi_close($mh);
}
Задумывал, чтобы грузилось в 10 потоков и не сильно комп грузило. Но в итоге грузится только 10(как в указании, по сколько подмассивов должно быть в массиве
PHP
1
$urls=array_chunk($cont_of_urls, 10);
)
А должно бы по идее по 10 до 30, а не сразу 30.


Друзья, что сделал не так? Где ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2012, 07:05
Ответы с готовыми решениями:

Проблемы с многопоточностью
Программа для восстановления забытого пароля к rambler.ru В однопоточном режиме работала, после подключения потоков стала выдавать ошибки...

Проблемы с многопоточностью в VB
Public Declare Function CreateThread Lib 'kernel32' (lpThreadAttributes As Any, ByVal dwStackSize As Long, lpStartAddress As Long,...

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

2
2 / 2 / 1
Регистрация: 28.09.2012
Сообщений: 35
02.10.2012, 18:45
в код не вникал, просмотрел так быстро...

смею предположить, что потоки только добавляются...
может они еще должны убираться?

после
PHP
1
$str = @curl_multi_getcontent($ch[$a]);
добавить
PHP
1
curl_multi_remove_handle( $mh, $ch[$a] );
Добавлено через 4 минуты
у меня есть набросок старой программы которая имитирует многопоточность в php
главный процесс запускает подчиненные и раздает им по мере выполнения из списка задания...

таким образом процессор грузится только в момент создания и уничтожения процессов
минус только в том, что на 100 процессов нужно около 2гб оперативы.
1
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 10
02.10.2012, 22:11  [ТС]
Цитата Сообщение от Bronya Посмотреть сообщение
в код не вникал, просмотрел так быстро...
....


Приветствую!

Огромное спасибо за ответ)) Помимо этого форума задал его еще на других - никто(кроме Вас) не ответил. Спасибо, уже разобрался. Код чуть подправил (в нем есть определенные косяки(я сразу не заметил)). Спасибо за ответ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2012, 22:11
Помогаю со студенческими работами здесь

С многопоточностью разобраться
Помогите с многопоточностью разобраться

Работа с многопоточностью
Имеется следующая довольно не сложная задачка: Написать программу, которая запускает параллельно 300 потоков, класса IncreaserThread....

Сложности с многопоточностью
Всем привет! Столкнулся с такой проблемой. Есть класс, в котором в числе прочего имеется динамически изменяемый массив LST(). Есть...

Сервер на сокетах с многопоточностью
подскажите пожалуйста что я может делаю не так хочу сделать сервер что бы к нему могли подключатся несколько клиентов через...

Не могу разобратся с многопоточностью
Доброго времени суток! Помогите советом, а то я завис =) Есть некий класс: ... class Coordinates { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru