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

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

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

Вроде как для этих целей можно заюзать multiprocessing ?
goblin_maks
уже сделал..тему можно закрывать..
Ferroman
Как?
sypper-pit
покажи код :)
razum2um
goblin_maks, огромное спасибо за наводку на multiprocessing!
(ночь угробил пытаясь убить треды… у меня даже ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(SystemExit)) возвращал ноль, а ему хоть бы хны.)
goblin_maks
покажи как сделал…а то эта проблема меня до сих пор тревожит…(подключения к БД Oracle через cx_Oracle)

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

try:

my_connection.cancel()

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

для WIN нету никаких проблем….хотя в доке написано что my_connection.cancel() актуально для не Win систем..а вот для Ubuntu с
Oracle Instant Client существуют проблемы.. операция .cancel() для некоторых запросов выполняется по 5-7 мин… :(
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB