Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 15, 2009 08:51:46

goblin_maks
От:
Зарегистрирован: 2008-12-10
Сообщения: 110
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите определиться как остановить поток..

Описание:
В потоках (threading.Thread) выполняются SQL запросы…в некоторых случаях выполнение запроса достигает 20 мин.
Цель:
Необходимо реализовать возможность отмены выполнения SQL запросов, собственно остановку потока.
Проблемы:
В данный момент убиваю потоки через:
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(SystemExit))

Понимаю что данные действия есть не совсем корректными, и завершение потоков таким образом часто приводит к segmentation fault приложения.

Как правильно реализовать остановку потока? Подкиньте идей для реализации.

Вроде как для этих целей можно заюзать multiprocessing ?



Отредактировано (Июнь 15, 2009 09:53:02)

Офлайн

#2 Июнь 16, 2009 11:59:44

goblin_maks
От:
Зарегистрирован: 2008-12-10
Сообщения: 110
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите определиться как остановить поток..

уже сделал..тему можно закрывать..



Офлайн

#3 Июнь 16, 2009 13:52:47

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

помогите определиться как остановить поток..

Как?

Офлайн

#4 Июнь 17, 2009 22:08:00

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

помогите определиться как остановить поток..

покажи код :)

Офлайн

#5 Авг. 27, 2009 21:36:54

razum2um
От:
Зарегистрирован: 2009-03-20
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите определиться как остановить поток..

goblin_maks, огромное спасибо за наводку на multiprocessing!
(ночь угробил пытаясь убить треды… у меня даже ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(SystemExit)) возвращал ноль, а ему хоть бы хны.)



Офлайн

#6 Авг. 28, 2009 09:49:08

goblin_maks
От:
Зарегистрирован: 2008-12-10
Сообщения: 110
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите определиться как остановить поток..

покажи как сделал…а то эта проблема меня до сих пор тревожит…(подключения к БД Oracle через cx_Oracle)

что я сделал в своем случае.. заставил поток прерваться.. запустив еще один паралельный поток, в котором выполнял:

try:

my_connection.cancel()

except:
pass
такая конструкция обоснована тем.. что частенько делал my_connection.cancel() в тот момент когда запрос только только закончился..следовательно возникали ошибки..

для WIN нету никаких проблем….хотя в доке написано что my_connection.cancel() актуально для не Win систем..а вот для Ubuntu с
Oracle Instant Client существуют проблемы.. операция .cancel() для некоторых запросов выполняется по 5-7 мин… :(



Отредактировано (Авг. 28, 2009 09:55:39)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version