|
Обрыв долгоработающей С-процедуры
|
|||
---|---|---|---|
#18+
Приветствую. Планирую написать серверную С-процедуру, которая будет обрабатывать данные из довольно больших таблиц. Соответственно по времени все это будет проходить достаточно долго + возможно будут открываться файлы и инфа будет сбрасываться в них. Вызываться она будет из программы-клиента. Так вот, интересует, а что будет, если во время выполнения этой процедуры соединение с программой-клиентом оборвется(обрыв шнурка, принудительное закрытие соединения через PQfinish, выключение компа клиента или что угодно), в смысле - процедура будет продолжать работу или как? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 11:21 |
|
Обрыв долгоработающей С-процедуры
|
|||
---|---|---|---|
#18+
будет ,пока не завершится.. а как завершится вывалиса ошибка.. да блин напиши функцию aaa(){ sleep(10); } и посмотри что будет. а как функции сообщить что типа пора заканчивать кога клиент сказал PQFinish или disconnectнулся я так и не нашел..если что нибудь придумаешь или найдешь сообщи..буду благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 13:16 |
|
Обрыв долгоработающей С-процедуры
|
|||
---|---|---|---|
#18+
Может быть постгрес получит сигнал SIGPIPE? Если так, то в С-процедуре написать обработчик и делать, что вам захочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 13:20 |
|
Обрыв долгоработающей С-процедуры
|
|||
---|---|---|---|
#18+
неа,при обычном дисконнекте не получит, разве что когда данные клиенту начнет отсылать.. а это будет происходить скорее всего когда функция уже завершится ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 15:44 |
|
Обрыв долгоработающей С-процедуры
|
|||
---|---|---|---|
#18+
тут появилась идея правда не совсем красивая да и проверить надо.. вобщем приблезительно так: делаеса вторая процедурка которая нужному Pidу(в котором крутица сишная процедурка) посылает сигнал какой-нибудь.. и выстовляет где-нибудь(таблица сиквенс и т.п.)время жизни сишной процедурке.. ( типа еще тебе работать 20 минут) соответвенно в клиэнте делаеш вызов сишной функции асинхронно.. и пока она не выполнится переодически (каждые 20 минут) вызываеш вторую процедурку по второму коннекту.. соответсвенно при аварийном дисконекте сишная функция будет крутица максимум 20 минут,секунд и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 19:59 |
|
|
start [/forum/topic.php?fid=53&msg=32555167&tid=2007823]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 127ms |
0 / 0 |