Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хаотичный вывод элементов массива. Хаотичный вывод элементов массива. Поток 
:(
    Опции темы
Litlle
Дата 26.8.2011, 16:12 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.8.2011

Репутация: нет
Всего: нет



Добрый день, столкнулся с проблемой в Perl, я пытаюсь довести до ума скрипт, работы с html страницами. Мучаюсь который день, по непонятным мне причинам выводятся элементы и заносяться в "&page=$i" в хаотичном порядке, 2,7,4,1,10,22 итд, а надо что бы каждый элемент выводился по порядку Прошу подтолкнуть в верном направление, помочь довести до ума скрипт. Очень прошу не пинать, я пытаюсь изучать perl.

Код

#!/usr/bin/perl
$|=1;
use strict;
use warnings;
use LWP::UserAgent;
#use HTTP::Cookies;
use Fcntl;
use threads;
use threads::shared;
my $tn = 10; #количество потоков
my $sl = 30; #количество страниц
my $ua = LWP::UserAgent->new;
$ua -> timeout(10);
my @trl;
my $req;
my $mth = "POST"; #GET/POST
my $url = "http://url";
my $cnt ="tegi'(.+?)'";


my $i = 0;
while ($i<=$sl) {
{
    for (0..$tn) {

        $trl[$_] = threads -> create(\&scan,$i++);
        #$i++;
        #print "===========================potok:", "$_", "================================", "\n";
    
    }
    $_->join for @trl;


   # for (@trl) {
    #    $_ -> join();
    #}

    sub scan {


        my $num = shift;

        $ua -> agent($agents[rand($#agents)]);

        $req = HTTP::Request->new($mth => $url);
        $req -> header('Accept' => 'text/html');

        
        $req -> header('Content-Type' => 'application/x-www-form-urlencoded');
        my $pst = "page=$i"; #если пост
        $req->content($pst);

   


        #$Cookie -> add_cookie_header($req);

        my $res = $ua->request($req);

        #print $i, ":",$num, "\n";
        $res->content=~/$cnt/;
        sysopen(FH, "text.txt", O_WRONLY|O_CREAT|O_APPEND);

        #print $i,"\n";
        if ($num == $sl) {
                print "[~] Success ...Exit....\n"; 
                close FH;
                exit();
                }
        if ($1) {

            print $i, ":", "1 takt:", $num, $1, "\n";
            print(FH $i, ":", $1, "\n");
        if ($num == $sl) {
                print "[~] Success ...Exit....\n"; 
                close FH;
                exit();
                }
            return 0;
        } else {
            for (0..30) {

                $ua -> agent($agents[rand($#agents)]);
                my $req = HTTP::Request -> new($mth => $url);
                $req -> header('Accept' => 'text/html');
                $req -> header('Content-Type' => 'application/x-www-form-urlencoded');
    
                $req->content($pst);
            
                #$Cookie -> add_cookie_header($req);
                my $res = $ua -> request($req);
                $res -> content =~/$cnt/;
                
                if ($1) {
                    print $i, ":", "2 takt:", $1, "\n";
                    print(FH $i, ":", $1, "\n");                    
                    return 0;
                }

                return 0;
                
            }
        }
        if ($num == $sl) {
            print "[~] Success ...Exit....\n"; 
            close FH;
            exit();
        }
        close FH;

    }

}


Большое человеческое спасибо.


Это сообщение отредактировал(а) Litlle - 26.8.2011, 16:15
PM MAIL   Вверх
DurRandir
Дата 26.8.2011, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: нет
Всего: 17



Вы представляете, как происходит планирование потоков в операционной системе? Если нет - то почему вы решили использовать именно их?)
PM   Вверх
Litlle
Дата 27.8.2011, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.8.2011

Репутация: нет
Всего: нет



Я прошу прощение если что-то не так, но я их использую для достижение максимально быстрого результата, для своей задачи.
если для теста вывести $i перед строкой my $res = $ua->request($req); , все выводится по порядку 1.2.3.4.5.6..., если-же после этой строки, то происходит хаотичность

Это сообщение отредактировал(а) Litlle - 27.8.2011, 09:43
PM MAIL   Вверх
DurRandir
Дата 28.8.2011, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: нет
Всего: 17



>максимально быстрого результата
Скорее всего, это неверно.

По сути же - когда у вас есть несколько потоков, вы не можете предсказать, если специально не создаёте "точек рандеву", порядок выполнения потоков друг относительно друга. Если вам не важен порядок запросов, а важен только порядок вывода, - соберите в родительском потоке результаты, отсортируйте, и выведите (my $res = $thr->join(), или через :shared).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.