Убить запущенный процесс в ColdFusion? - PullRequest
5 голосов
/ 18 февраля 2010

Я пишу скрипт загрузки базы данных в ColdFusion. Он загружает около 150000 записей в дюжине таблиц. Я запускаю скрипт через запрос веб-браузера. Есть ли способ убить процесс, как только я запросил страницу? Я могу остановить страницу в браузере, но вставки в базу данных продолжаются в бэкэнде до тех пор, пока сценарий не будет завершен, что делает процесс отладки очень медленным, поскольку мне приходится каждый раз запускать весь сценарий. Могу ли я что-нибудь сделать через бэкэнд Java?

Среда, в которой я нахожусь, - это ColdFusion 8, работающая через IIS. У меня отключен мониторинг производительности, но я хотел бы иметь возможность имитировать возможность убивать задания, как в мониторе производительности.

Ответы [ 5 ]

3 голосов
/ 18 февраля 2010

Я пытался создать что-то вроде pid-файла Unix: ваш скрипт должен периодически (возможно, каждые 10/100/1000 итераций) проверять доступность какого-либо файла в файловой системе и прекращать выполнение, если он содержит определенное значение, или, возможно, если существует или не существует вообще.

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

Вам также нужен второй скрипт, который будет изменять состояние вашего "pid-объекта". Это может быть так же просто, как и другой .cfm, который вы можете использовать в браузере.

2 голосов
/ 18 февраля 2010

Возможно, вы захотите запустить процесс, используя cfthread .

Начните процесс как ...

<cfthread name="myThread" action="run"> 
    ...Your loop to insert into database....
</cfthread>

Тогда вы можете убить поток, используя ...

<cfthread action="terminate" name="myThread"/>
2 голосов
/ 18 февраля 2010

В цикле из 150 000 записей вы можете просто остановить его на любом количестве, которое вы считаете подходящим.Установите переменную-счетчик, и всякий раз, когда она попадает в цикл, просто <cfabort> или <cfbreak>.

1 голос
/ 19 февраля 2010

Если у вас установлено программное обеспечение для управления, такое как FusionReactor, вы можете использовать его для остановки запуска сценариев.

0 голосов
/ 18 февраля 2010

с некоторыми продуктами, такими как fusionreactor, вы можете уничтожить базовый поток Java, но если база данных фактически контролирует запрос, вы не сможете остановить его (в базе данных). Вы должны подождать, пока база данных не вернет контроль над потоком.

...