Если вы не заинтересованы в том, чтобы другие потоки корректно закрывались, просто запустите их в режиме демона и оберните соединение очереди в поток терминатора.
Таким образом, вы можете использовать метод join
потока - который поддерживает тайм-аут и не блокирует исключения - вместо того, чтобы ждать в методе join
очереди.
Другими словами, сделайте что-то вроде этого:
term = Thread(target=someQueueVar.join)
term.daemon = True
term.start()
while (term.isAlive()):
term.join(3600)
Теперь Ctrl + C завершит MainThread, после чего интерпретатор Python жестко убивает все потоки, помеченные как «демоны». Обратите внимание, что это означает, что вы должны установить «Thread.daemon» для всех других потоков или корректно завершить их, перехватив правильное исключение (KeyboardInterrupt или SystemExit) и выполнив все, что нужно для их выхода.
Также обратите внимание, что абсолютно необходимо , чтобы передать число в term.join()
, так как в противном случае оно также будет игнорировать все исключения. Вы можете выбрать произвольно большое число.