Carzil
Дек. 8, 2010 20:39:59
Есть класс:
#!/usr/bin/python
import threading
class t(threading.Thread):
def run(self):
for i in xrange(0, 103):
print i
Собственно, вопрос: как остановить выполнение потока на рандомном числе?
Андрей Светлов
Дек. 8, 2010 20:44:32
Выйти из функции run.
http://asvetlov.blogspot.com/2010/11/1.html - как для вас писал :)
Carzil
Дек. 8, 2010 20:56:57
Это я уже понял. А как остановить выполнение функции вне функции??
Андрей Светлов
Дек. 8, 2010 21:23:44
Читать умеете? Снаружи завершить поток нельзя.
Можно извне взводить какой-нибудь флаг, и в потоке его проверять. Других безопасных способов не существует.
Carzil
Дек. 8, 2010 21:59:49
Задача: как только придёт сообщение от сокета, сразу оборвать raw_input() и вывести вновь пришедшее сообщение. Как это сделать?
to Андрей Светлов: и как такую задачу решить с помощью флагов?
Андрей Светлов
Дек. 8, 2010 22:15:44
Carzil
Задача: как только придёт сообщение от сокета, сразу оборвать raw_input() и вывести вновь пришедшее сообщение. Как это сделать?
to Андрей Светлов: и как такую задачу решить с помощью флагов?
И где здесь потоки? К слову, raw_input “оборвать” не выйдет. Придется городить что-то другое.
Carzil
Дек. 8, 2010 22:28:21
У нас есть два потока: один слушает соединение, а другой - пользовательский ввод. А что можно нагородить? :(
Андрей Светлов
Дек. 9, 2010 02:11:06
У вас нестандартная хотелка.
Для CLI подобное не требуется.
GUI и по настоящему консольные системы вроде curses делают ввод немного иначе.
Работу raw_input нельзя прервать программно.
Может, вам на самом деле нужна не консоль?
Представил себе эту красоту: вколачиваю я текст, а прога внезапно (сообщение, понимаете ли, пришло) мои попытки рубит на корню, печатает это чертово сообщение и предлагает мне ввести всё заново, более расторопно щелкая по кнопкам. А то вдруг еще одно сообщение придёт…
Eliont
Дек. 9, 2010 03:31:41
Поток - прервать нельзя. Процесс - можно.
В питоне есть модуль processing - попробуй его заюзать.
Хотя можешь порыскать по сети - я находил рецепты-извращения, связаные, например, с пропихиванием исключения внутрь потока, но всё равно с атомарными операциями это не прокатит.