Убить субпотоки при перезапуске Django? - PullRequest
0 голосов
/ 16 сентября 2009

Я использую Django и создаю потоки, которые работают параллельно, пока Django работает. Эти потоки иногда запускают внешние процессы, которые блокируют при ожидании внешнего ввода.

Когда я перезагружаю Django, те потоки, которые блокируют в ожидании внешнего ввода, иногда сохраняются после перезапуска, и, кроме того, они имеют и остаются открытыми, порт 8080, поэтому Django не может перезапуститься.

Если бы я знал, когда Django перезагружался, я мог бы убить эти темы. Как я могу узнать, когда Django перезапускается, чтобы я мог убить эти потоки (и их порождение).

Из django.utils.autoreload не было очевидно, где могут быть какие-либо перехваты, чтобы сообщать, когда происходит перезапуск.

Есть ли альтернативный способ уничтожения этих потоков при запуске Django?

Спасибо за чтение.

Brian

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

Процессу Python непросто уничтожить свои собственные потоки - еще труднее (почти невозможно) уничтожить потоки другого процесса, и я подозреваю, что последний случай у вас ... «перезапуск», по-видимому, происходит в другом процессе, поэтому эти потоки для вас более или менее за пределами!

Вместо этого я предлагаю «стежок во времени, экономящий девять»: когда вы создаете эти потоки, убедитесь, что вы установили для их свойства daemon значение True (см. документы - это setDaemon метод в Python <= 2.5). Таким образом, когда основной поток заканчивается, например, перезапустить в другом процессе, так же как и весь процесс (который должен автоматически завершать все потоки демона! -) </p>

0 голосов
/ 16 сентября 2009

Что вы используете для перезапуска django? Я бы поместил что-то в этот скрипт, чтобы найти идентификаторы процесса в файле (ах) сокета и убить их перед запуском django.

В качестве альтернативы, вы могли бы быть очень тяжелыми руками и просто запустить что-то вроде 'pkill -9 * django *' перед вашей последовательностью запуска django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...