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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> небольшие траблы с потоками 
:(
    Опции темы
reddim
Дата 29.1.2012, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не могу сообразить как преобразовать многопоточный скрип что бы он работал корректно.
Суть: два текстовых файла logins.txt и pass.txt
Нужно их вывести на экран..что бы они были без повторенией !!! вот так нужно
user=pass1
user=pass2
user=pass3

Код

use threads;
use threads::shared;

my $threads = 5 ;
my @trl = ();

$trl[$_] = threads->create(\&potoki) for 0..$threads - 1;
$_->join for @trl;

sub potoki
{
тут организовать чтение из файлов и вывод 
}


Пробовал вот так...

Код

#!/usr/bin/perl
use threads;
use threads::shared;

my $threads = 3 ;
my @trl = ();



$trl[$_] = threads->create(\&gogo) for 0..$threads - 1;
$_->join for @trl;

my ($password,$sites);
sub gogo
{
open (F,"<sites.txt");
while(my $site=<F>){

chomp($site);

open (N,"<pass.txt");
while(my $pass=<N>){

chomp($pass);

print "$site=$pass\n";

}}}
<>;

Но результат  с повторами, т.е 3 потока = 3 повтора...

user=pass1
user=pass2
user=pass3
user=pass1
user=pass2
user=pass3
user=pass1
user=pass2
user=pass3

Вообщем пробовал и через  foreach и еще по разному, пришел к выводу, что нужно это всё дело сделать что бы было в 1 цикле = while

т.е нужно это в 1 файл как то сделать а потом разбить, и тогда нормально получится...типа 
while(@sites) {
my ($pass, $sites) = split $делитель => shift @sites;
}

просто это так если чесно за*ло 30 раз с этим сталкиваюсь и не могу решить.

Это сообщение отредактировал(а) reddim - 30.1.2012, 00:00
PM MAIL   Вверх
infarch
Дата 30.1.2012, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А что тут странного? Вы одновременно читаете одни и те же файлы в нескольких потоках. Вот и получаете одни и те же строки в выводе. Если дело просто в чтении файла, при чем тут потоки? Сделайте простой цикл. Если же предстоят некие операции связанные с веб, тогда да, потоки не помешают. Но не так как вы сделали. Сначала в главном потоке надо вычитать файлы и создать очередь задач. Потом создать потоки исполнители и расшарить между ними эту очередь. Почитайте про Thread::Queue.
PM MAIL   Вверх
reddim
Дата 30.1.2012, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я вам не гуру потоков) я вообще ничего не понял что вы написали, почитаю..мб есть какие-то примеры..а через данную конструкцию как реализовать

use threads;
use threads::shared;
my $threads = 5 ;
my @trl = ();
$trl[$_] = threads->create(\&potoki) for 0..$threads - 1;
$_->join for @trl;
sub potoki
{
чтение из файлов и вывод 
}
PM MAIL   Вверх
DurRandir
Дата 30.1.2012, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Какую именно операцию вы хотите распараллелить? Как только вы ответите для себя на этот вопрос - то сможете это описать. А то пока у меня такое чувство, что потоки для вас - магия, которая "сделает всё сама".
PM   Вверх
tzirechnoy
Дата 30.1.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Берёте какую-нибудь книжку по программированию для начинающих (лучшэ -- Кнут Д., Искусство программирования), и начинаете решать примеры. Последовательно. Когда прорешаете примеры нормальной сложности -- возвращайтесь, будет о чём разговаривать.

(Потому, что всё, что Вы написали -- это просто ад. А Вашэ написание методом генетического программирования -- в особенности).

PS И да, Ш-шпанчик Вас упаси связываться с потоками. Это вообще чрезвычайно переоцэнённая, а потому достаточно вредная модэль вычислений. В общем, не трогайте.
PM MAIL   Вверх
reddim
Дата 30.1.2012, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я прошу лишь показать мне многопоточный пример вывода данных из 2 разных файлов...и всё..

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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