Ctrl-C не прерывает semaphore.acquire - PullRequest
3 голосов
/ 07 мая 2011
while True:
    try:
        queries_semaphore.acquire()
        query = queries.pop(0)
        # Do some stuff ...
        info('Query executed: `%s\'' % str(query))
    except KeyboardInterrupt:
        okay('quit')
        break

Проблема в том, что KeyboardInterrupt поднимается только после возврата queries_semaphore.acquire(), поэтому пользователь не может разорвать программу с помощью Ctrl-C. Какое хорошее решение в этом случае?

1 Ответ

3 голосов
/ 07 мая 2011

Я бы создал еще один поток для части query_semaphore.acquire () и оставил основной поток для взаимодействия с пользователем.Если пользователь нажал Ctrl-C, вам нужно разблокировать рабочий поток, установив семафор и завершив его.

...