124bit
Окт. 2, 2008 23:43:46
приостановка и прерывание потоков извне…. собственно интересует особенно приостановка, как это реализовать,?
124bit
Окт. 2, 2008 23:47:16
единственное, пока, что пришло в голву, это зациклить кучу раз в ключевых местах потока проверку какойто переменной до ее изменения..
shiza
Окт. 2, 2008 23:52:31
Да. И это правильное решение. Тока надо sleep не забыть сделать.
124bit
Окт. 3, 2008 00:01:12
ну этож очень некрасиво и неудобно.. мне штук 20ть таких цикликов вставлять прийдется..если не больше((
както покрасивее, потоньше ж наверно можно?.. не могли ж такой важный аспект в таком красивом языке не доробтать))
стоп, а запущеный поток, хоть как то не выключая программы и не ожидаю его завершения убить можна,?
я совершенно не знаю ниче о процессном програмированние в питон.. может поток както можно заменить подпроцессом, который в свою очередь можно приостоновить извне,?
shiza
Окт. 3, 2008 00:06:31
Это тема большая и сложная.
Есть такой недостаток, что в питоне нельзя не запаузить процесс не убить.
По странному стечению обстоятельсв, как убить поток - недавно нашли вариант:
http://python.su/forum/viewtopic.php?id=2759
shiza
Окт. 3, 2008 00:07:59
Есть модуль реалезации процессов
http://pyprocessing.berlios.de/В большинстве случаев он может помочь (хотя тоже есть некоторые огрехи).
shiza
Окт. 3, 2008 00:12:07
Для запаузивания потоков я так обычно поступаю - вставляю куда-нибудь в место потока, которое переодически пробегается, обьект синхронизации с блокировкой (например threading.Event() )
И снаружи выставляю/снимаю блокировку.
DarkAnthey
Окт. 21, 2008 12:51:14
>>По странному стечению обстоятельсв, как убить поток - недавно нашли вариант:
http://python.su/forum/viewtopic.php?id=2759Попробывал етот тест. Редко когда отрабатывает без “could not determine the thread's id”, это во первых.
А во вторых, если поставить time.sleep(1). Если не raise-нется, то будит ждать полное время и только потом завершиться. А найти какой нибуть “более менее надежный” способ было бы очень позитивно.
shiza
Окт. 21, 2008 13:22:18
DarkAnthey
Попробывал етот тест. Редко когда отрабатывает без “could not determine the thread's id”, это во первых.
ИМХО Это происходит, когда ты сразу посде создания потока пытаешся его убить ( он тогда создастся не успевает).
shiza
Окт. 22, 2008 02:36:19
DarkAnthey
А во вторых, если поставить time.sleep(1). Если не raise-нется, то будит ждать полное время и только потом завершиться. А найти какой нибуть “более менее надежный” способ было бы очень позитивно.
Вся фишка в том, что time.sleep() блокирует поток.
Попробуй делать sleep помельче и несколько раз =)
типа
for i in xrange(100): time.sleep(0.01)