![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Доброго времени суток.
Вот возник вопрос - задача. Похожая тема проскакивала тут но ответа небыло никакого ![]() Пишу прогу c использованием wxPerl. Скрипт под Windows. Прога активно работает с БД. И когда происходит считывание данных или загрузка в БД часто интерфейс "подвисает". Появилась мысль, может если запустить отдельный тред или процесс, который будет обрабатывать запросы от/к бд, то может избавлюсь от тормозов? Внимание вопрос, как организовать взаимодействие с этим отдельным процессом? Я смутно догадываюсь, что стоит использовать threads или fork, но на чем лучше остановиться? И самое главное возможно ли добиться функционала EasyDBI: после отработки запроса вызывать определенный метод из определенного package? |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Сложно сказать не видя самого скрипта и его структуры.
Однако, попробую предложить вариант запуска запросов через threads c последующим вызовом "определенных методов из определенного package". Писал прямо в форум, так что на работоспособность даже не претендует.
-------------------- Died at Life.pl line 21 |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
KSURi, правильно поправил я выразился совершенно не ясно.
Объясняю более обстоятельно. когда человек делает запрос к EasyDBI, что-то типа этого
когда EasyDBI отработает она передаст результат в сессию ret и вызовет метод test. кроме того есть стойкое желание иметь доступ к этому DBI thread из любого пакета входящего в состав программы. Я не могу понять как можно создать процесс\поток в который можно будет передавать данные куда нужно вернуть данные, что-то типа ссылки на пакет и метод, но ведь blessed структуры нельзя расшарить для thread? кроме того ведь если делать ->join, то не будет "паралельности", нужно будет все равно ждать пока thread отработает или я не прав? а ждать не хочется, так как в этом случае "подвисает" интерфейс. |
|||
|
||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Межпроцессорное взаимодействие сделайте с помощью сокетов. Работать будет везде.
Если ваш скрипт будет работать под Windows. то не используйте fork. Он очень плохо под виндус работает. Лучше использовать winapi. Ну, а в Unix fork. ###Unix my $pid = fork; die "DEBUG fork can't create child process" unless (defined($pid)); if ($pid == 0) { exec ("perl -w script.pl") or die "can't exec script.pl"; } ###Windows use Win32::Process; $appname = 'F:/perl/bin/perl.exe'; Win32::Process::Create($ProcessObj, $appname, "perl -w script.pl.pl", 0, NORMAL_PRIORITY_CLASS, ".")|| die ErrorReport(); sub ErrorReport{ print Win32::FormatMessage( Win32::GetLastError() ); } |
|||
|
||||
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
В POE это делается через Wheel::Run. EasyDBI тоже кажется так работает.
Можно запустить любой процесс или свой скрипт (который например под POE не хочется переписывать) отдельным подпроцессом в системе, при этом ядро POE сохранит с ним связь через стандартный воод/вывод.... |
|||
|
||||
JUmPER |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 22.8.2006 Репутация: нет Всего: 3 |
не советую использовать перловые потоки: они не очень дружат с XS модулями
// кстати, на виндах форк тоже через потоки работает... --------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |