Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 2, 2008 23:43:46

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

приостановка и прерывание потоков извне

приостановка и прерывание потоков извне…. собственно интересует особенно приостановка, как это реализовать,?



Офлайн

#2 Окт. 2, 2008 23:47:16

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

приостановка и прерывание потоков извне

единственное, пока, что пришло в голву, это зациклить кучу раз в ключевых местах потока проверку какойто переменной до ее изменения..



Офлайн

#3 Окт. 2, 2008 23:52:31

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

приостановка и прерывание потоков извне

Да. И это правильное решение. Тока надо sleep не забыть сделать.



Офлайн

#4 Окт. 3, 2008 00:01:12

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

приостановка и прерывание потоков извне

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

я совершенно не знаю ниче о процессном програмированние в питон.. может поток както можно заменить подпроцессом, который в свою очередь можно приостоновить извне,?



Отредактировано (Окт. 3, 2008 00:03:18)

Офлайн

#5 Окт. 3, 2008 00:06:31

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

приостановка и прерывание потоков извне

Это тема большая и сложная.
Есть такой недостаток, что в питоне нельзя не запаузить процесс не убить.
По странному стечению обстоятельсв, как убить поток - недавно нашли вариант: http://python.su/forum/viewtopic.php?id=2759



Офлайн

#6 Окт. 3, 2008 00:07:59

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

приостановка и прерывание потоков извне

Есть модуль реалезации процессов http://pyprocessing.berlios.de/
В большинстве случаев он может помочь (хотя тоже есть некоторые огрехи).



Офлайн

#7 Окт. 3, 2008 00:12:07

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

приостановка и прерывание потоков извне

Для запаузивания потоков я так обычно поступаю - вставляю куда-нибудь в место потока, которое переодически пробегается, обьект синхронизации с блокировкой (например threading.Event() )
И снаружи выставляю/снимаю блокировку.



Отредактировано (Окт. 3, 2008 00:18:18)

Офлайн

#8 Окт. 21, 2008 12:51:14

DarkAnthey
От:
Зарегистрирован: 2008-07-22
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

приостановка и прерывание потоков извне

>>По странному стечению обстоятельсв, как убить поток - недавно нашли вариант: http://python.su/forum/viewtopic.php?id=2759
Попробывал етот тест. Редко когда отрабатывает без “could not determine the thread's id”, это во первых.
А во вторых, если поставить time.sleep(1). Если не raise-нется, то будит ждать полное время и только потом завершиться. А найти какой нибуть “более менее надежный” способ было бы очень позитивно.



Офлайн

#9 Окт. 21, 2008 13:22:18

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

приостановка и прерывание потоков извне

DarkAnthey
Попробывал етот тест. Редко когда отрабатывает без “could not determine the thread's id”, это во первых.
ИМХО Это происходит, когда ты сразу посде создания потока пытаешся его убить ( он тогда создастся не успевает).



Офлайн

#10 Окт. 22, 2008 02:36:19

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

приостановка и прерывание потоков извне

DarkAnthey
А во вторых, если поставить time.sleep(1). Если не raise-нется, то будит ждать полное время и только потом завершиться. А найти какой нибуть “более менее надежный” способ было бы очень позитивно.
Вся фишка в том, что time.sleep() блокирует поток.
Попробуй делать sleep помельче и несколько раз =)
типа
for i in xrange(100): time.sleep(0.01)



Отредактировано (Окт. 22, 2008 03:00:24)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version