Как я могу прервать метод блокировки в Python? - PullRequest
3 голосов
/ 06 сентября 2011

Обычно я могу прервать работу с помощью Ctrl + C, но иногда, когда я использую потоки, это не работает - пример ниже.

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> time.sleep(100)
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
K    eyboardInterrupt
>>> import Queue
>>> q = Queue.Queue(maxsize=3)
>>> q.put(0)
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
^C^C^C^C^C^C^C^C

^C^C^C

^C^C
^C
@*#()#@#@$!!!!!

edit: Есть ли способ вернуться к переводчику? Решения до сих пор полностью убивают Python и ваше существующее пространство имен.

Ответы [ 3 ]

3 голосов
/ 06 сентября 2011

Вы можете убить интерпретатор Python с помощью Ctrl + \ .

Это отправит SIGQUIT вместо SIGINT.

1 голос
/ 06 сентября 2011

Быстрый обходной путь для ошибки ^ C - это приостановка процесса со всеми потоками сначала с помощью ^ Z, а затем его уничтожение.

Это работает в Linux во многих случаях, когда ^ C не удается, и, как я только что проверил, это работает и здесь (протестировано на Python v.2.6.5):

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Queue
>>> q = Queue.Queue(maxsize=3)
>>> q.put(0)
>>> q.put(1)
>>> q.put(2)
>>> [^C]
KeyboardInterrupt #does not kill the process
>>> [^Z - Suspends and exits to shell]
[1]+  Stopped                 python
#mdf:~$ kill -9 %%
[1]+  Killed                  python
0 голосов
/ 06 сентября 2011

Ленивый способ сделать это - открыть другое окно.

Выполнить ps, чтобы получить PID.

Выполнить kill, чтобы завершить процесс, нарушающий работу.

...