2009-09-16 6 views
0

저는 장고를 실행 중이며 장고가 실행되는 동안 병렬로 실행되는 스레드를 만들고 있습니다. 이러한 스레드는 외부 입력을 기다리는 동안 블록하는 외부 프로세스를 실행하는 경우가 있습니다.Django가 다시 시작될 때 하위 스레드를 종료 하시겠습니까?

Django를 다시 시작하면 외부 입력을 기다리는 동안 블로킹하는 스레드가 다시 시작될 때까지 지속되고 더 이상 포트 8080을 열어서 Django를 다시 시작할 수 없습니다.

장고가 다시 시작될 때 알았다면 그 스레드를 죽일 수있었습니다. 장고가 재시작 될 때 그 스레드 (및 그 스폰)를 죽일 수있는 방법을 알 수 있습니까?

django.utils.autoreload에서 재시작이 발생할 때 어떤 후크가 있는지를 알 수없는 곳은 분명하지 않았습니다.

장고를 시작할 때이 스레드를 죽일 수있는 다른 방법이 있습니까?

읽어 주셔서 감사합니다.

브라이언

답변

1

파이썬 프로세스가 자신의 스레드를 죽이는 것은 쉽지 않습니다. 심지어 스레드를 죽이기가 더 어렵고 (거의 불가능합니다) 다른 프로세스가 있습니다. "아마도 다른 프로세스에서 발생하고 있기 때문에 스레드가 어느 정도 범위를 벗어납니다.

내가 대신 제안하는 것은 "시간에 스티치가 저장 구"당신이 그 스레드를 만들 때, 당신은 (the docs를 참조 - 그것은 파이썬 < = 2.5에서 setDaemon 방법입니다) True 그들의 daemon 속성을 설정해야합니다. 메인 스레드가 종료 될 때,이 방법으로. 다른 프로세스에서 다시 시작하려면 전체 프로세스도 자동으로 시작됩니다 (모든 데몬 스레드를 자동으로 제거해야합니다.) -

+0

감사합니다. 그 이후로 복잡성 문제의 전체 집합을 해결하기 때문에, 이것을 위해 새로운 django가 아닌 새로운 데몬을 시작하기로 결정했습니다. 따라서 나는 당신의 제안을 시험해 볼 수있는 능력을 잃어 버렸습니다, 나는 두렵습니다. 그러나 나는 당신의 말을 듣고 답으로 표시 할 것입니다. ;) –

0

django를 다시 시작 하시겠습니까? 소켓 파일에서 프로세스 ID를 찾아 장고를 시작하기 전에 죽일 스크립트에 뭔가를 넣을 것입니다.

또는 매우 무거울 수 있으며 django 시작 시퀀스 전에 'pkill -9 * django *'와 같이 실행하면됩니다.

관련 문제