Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
[perl] перезапуск потоков |

08.11.2008, 17:25
|
|
Гарант Форума
Регистрация: 22.01.2005
Сообщений: 267
Провел на форуме: 1982081
Репутация:
1067
|
|
[perl] перезапуск потоков
написал многопоточный скрипт, иногда бывают ситуации что потоки вылетают, написал кодес перезапуска потоков если количество меньше первоначально-заданного, но он не срабатывает, в чем может быть дело?
Код:
# проверяем вдруг какие-то потоки сдохли
$thr_cnt = threads->list();
share($thr_cnt);
if ($thr_cnt < $threads)
{
$cnt = $threads - $thr_cnt;
threads->new(\&start) for (1..$cnt);
&log("[+] NEW THREAD ADDED BECAUSE OLD ONE IS GAY-THREAD\n");
}
Последний раз редактировалось .::Gh0st::.; 08.11.2008 в 17:53..
|
|
|

08.11.2008, 21:56
|
|
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме: 6144796
Репутация:
1095
|
|
Покажи весь код, где происходит работа с потоками - по этому кусочку трудно сказать, в чем проблема.
|
|
|

08.11.2008, 22:30
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
иногда бывают ситуации что потоки вылетают
И вместо того, чтобы исправить ошибку, ты начинаешь строить костыли. чтобы обойти часть последствий?
ыыыыыыыыыыыыыы хуясебе)))
+1
|
|
|

08.11.2008, 23:17
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
И вместо того, чтобы исправить ошибку, ты начинаешь строить костыли. чтобы обойти часть последствий?
Есть ошибки которые толком не исправить, например если используются потоки и компонент http::cookies
|
|
|

09.11.2008, 02:28
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
Исключения?
|
|
|

09.11.2008, 14:57
|
|
Гарант Форума
Регистрация: 22.01.2005
Сообщений: 267
Провел на форуме: 1982081
Репутация:
1067
|
|
nerezus
по началу у меня была проблема - forum.antichat.ru/showthread.php?p=911014
я советовался с некоторыми кодерами на perl, сказали что ошибка довольно распространенная и хз что с ней делать, ее удалось решить благодаря совету Kaimi
но перед тем как постить на форум свою проблему я погуглил и не нашел информации о подобных проблемах. набросал простенький перезапуск потоков, но он так и не срабатывал, а он мне еще нужен будет, поэтому хочу решить этот вопрос.
нужен будет для таких вот ситуаций:
Код:
Free to wrong pool 6cde3408 not 83770a0
эта ошибка ссылалась на
- я проблему исправил, но эта ошибка (насколько я понял из-за большой нагрузки на память) иногда возникает в случайных местах и может вырубить поток.
это было по пододу построения костылей, тем не менее, я в топике указал конкретную проблему - перезапуск потоков. как бы это нелогично ни казалось для вас таких умных ребят nerezus и balt - у меня конкретная цель, я не советов о том что баги править от вас жду. если есть чем помочь - буду очень признателен, если нет - то ваши посты оффтоп. просьба не разводить его.
Последний раз редактировалось .::Gh0st::.; 09.11.2008 в 15:06..
|
|
|

09.11.2008, 15:04
|
|
Гарант Форума
Регистрация: 22.01.2005
Сообщений: 267
Провел на форуме: 1982081
Репутация:
1067
|
|
Digimortal
Код:
my $threads = 20;
threads->new(\&start) for (1..$threads);
$_->join for threads->list;
sub start
{
my $tid = threads->tid();
print "[+] $tid THREAD STARTED\n";
my $thr = threads->object($tid);
if ($thr->is_joinable())
{
print "[+] joining $tid thread\n";
$thr->join();
}
else {print "$tid thread already joined\n";}
sleep 15;
while (1)
{
# проверяем вдруг какие-то потоки сдохли
$thr_cnt = threads->list();
share($thr_cnt);
#print "[+] $thr_cnt for $tid THREAD\n";
if ($thr_cnt < $threads)
{
$cnt = $threads - $thr_cnt;
threads->new(\®) for (1..$cnt);
print "[+] NEW THREAD ADDED BECAUSE OLD ONE IS GAY-THREAD\n";
}
# working part
}
}
|
|
|

09.11.2008, 22:18
|
|
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме: 6144796
Репутация:
1095
|
|
Тут ошибка уже в том, что ты джойнишь объект потока внутри его же поточной функции. Вообще здесь без джойна потоков можно обойтись - просто контролировать число созданных потоков из основного потока в цикле, а в самой поточной функции делать декремент переменной $threads перед самым завершением ее работы. Но и этим путем идти не советую, гораздо лучше, проще и правильнее, как уже написал nerezus, использовать механизм обработки исключений.
Последний раз редактировалось Digimortal; 11.11.2008 в 00:13..
|
|
|
|
 |
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Спамер MirTesen [Perl]
|
Kaimi |
Разное - Покупка, продажа, обмен |
5 |
03.08.2008 19:35 |
|
[PERL] Basic auth
|
Sharky |
PHP, PERL, MySQL, JavaScript |
3 |
13.07.2008 01:24 |
|
[Perl] Небольшой доркер
|
biophreak |
PHP, PERL, MySQL, JavaScript |
2 |
08.07.2008 13:47 |
|
Pochta.ru Multithreads Brutforce [perl]
|
ZAMUT |
E-Mail |
12 |
14.06.2008 00:19 |
|
FTP & PR cheker [perl]
|
ZAMUT |
PHP, PERL, MySQL, JavaScript |
2 |
16.05.2008 21:57 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|