3 опции:
Main
, если Вы объявляете, что Ваш Main
метод возвращается int
. Environment.Exit(code)
. Environment.ExitCode = -1;
. Это будет использоваться, если ничто иное не будет устанавливать код возврата или использовать одну из других опций выше). В зависимости от Вашего приложения (консоль, сервис, веб-приложение, и т.д.) различные методы могут использоваться.
Я согласен с тем, что документы Python неверны или, точнее говоря, неполны в отношении sys.exit и SystemExit, когда они вызываются / запускаются потоками, отличными от основного; пожалуйста, откройте проблему с документацией в онлайн-трекере Python, чтобы ее можно было решить в следующей итерации документации (возможно, в ближайшем будущем - исправления документации проще и удобнее, чем исправления кода; -).
Решение - довольно просто, конечно - просто оберните любую функцию, которую вы используете как цель threading.Thread
, декоратором, который выполняет try
/ , кроме SystemExit, e :
вокруг него и выполняет дополнительную функцию "запись в stderr", которая вам нужна (или, что лучше, вместо этого использует вызов logging.error) перед завершением. Но, учитывая проблему с документом, на которую вы правильно указали, это '
Не все потоки в Python одинаковы. Вызов sys.exit из потока фактически не приводит к выходу из системы. Таким образом, вызов sys.exit () из дочернего потока бессмысленен, поэтому имеет смысл, что он ведет себя не так, как вы ожидаете.
Эта страница больше рассказывает о потоках объектов и различиях между потоки и специальный «основной» поток.