2011-03-11 8 views
1

저는 파이썬에서 Sander's recipy을 사용하는 데몬으로 작업하고 있습니다.파이썬 스레드와 데몬

지금까지는 정상적으로 실행되었지만 내 뇌를 시추하는 몇 가지 변경 사항을 소개해야합니다. 사실 :

샌더의 데몬 (Daemon)의 삶의 방식은 요청할 때마다 개체의 새로운 인스턴스를 만듭니다. 예 :

[prompt]> python my_daemon.py start 
[prompt]> python my_daemon.py check_whatever (new instance of my_daemon.py is created, but it looks for pid and finally gets the first one.) 

그런 다음 이전 인스턴스를 만드는 데 사용 된 PID를 찾아서 액세스하고 관리 할 수 ​​있습니다.

상황은 다음과 같습니다.이 데몬은 데몬이 시작 명령을 수행하고 다른 명령을 승인 할 준비가 된 후에 계속 작동하는 두 개의 스레드를 생성합니다 (새 인스턴스가 만들어 짐을 기억하십시오). 다른 명령에서이 스레드에 액세스하고 싶습니다. 그러나 방법을 찾지 못했습니다 (있는 경우).
필자가 조사한 바에 따르면 pid를 사용하여 데몬을 죽이거나 검사 만 할 수 있지만 해당 인스턴스에서 생성 한 개체 (ergo, 스레드)를 가져올 수 있는지 여부는 알 수 없습니다.

열기 질문 : 나는 그것의 PID의 프로세스를 복구 할 수 있습니다 - 만약, 나 또한 그 개체에 액세스 할 수 있습니다

?

-이 스레드를 서브 프로세스로 변환하여 주 스레드가 완료되었거나 계속 기다리고있는 상태로 유지하도록 고려해야합니까?

답변

0

새로운 프로세스가 필요한 것인지 아닌지는 잘 모르겠지만, 데몬의 작업 크기에 따라 GIL 주위를 조심스럽게 관리하는 것보다 구현하는 것이 훨씬 더 깔끔할 것입니다 쓰레드가 실행되는지 여부, 순수 Python인지 또는 외부 라이브러리를 호출하여 GIL을 해제 할 수 있는지 여부를 결정합니다.

pid로 액세스 할 때, 나는 그것이 가능한지 확실하지 않습니다. 확실히 자신의 PID가 없기 때문에 창 아래의 스레드가 아닙니다. 새로운 스레드에 파이프를 열어 두는 것이 훨씬 더 간단 해 보입니다.

이 문제에 대한 답변은 아키텍처 결정이 너무 많지만, 이미 이러한 결정을 내린 경우 언제든지 질문에 대한 정보를 추가해 주시면보다 자세한 정보를 제공해 드리겠습니다.

+0

아직 결정 사항을 선택하지 않았습니다. 방금 시작 명령에서 스레드를 생성하는 프로세스를 사용하여 나머지 명령에서 스레드에 액세스 할 수 없다는 것을 알았습니다. – Francisco

0

코드의 내용에서 "제거"를 수행 한 후 활성 줄을 최소한으로 줄인 다음에는 스레드가 여전히 (훌륭한 전사로서) 서 있다는 것을 깨달았습니다. 내가 파일 설명자를 null로 설정하기 때문에 데몬 자체의 동작에서 발견 될 수 있다고 생각되는 파일을 처리 할 때 몇 가지 문제가 있습니다.

현재로서는 자신을 행복하게 생각합니다. 더미 프로토콜을 사용하여 해당 스레드 (예 : 더미 구성 파일)의 실행 동작을 변경할 수 있습니다.

+0

호기심, 데몬 (내 자신의 클래스에서 재정의 된)의 run 메소드 내부의 파일을 처리 할 수 ​​없다. – Francisco

+0

[아이러니] 문장 os.chdir ("/")이 당신에게 뭔가를 말합니까? [/ 아이러니] 나는이 변화를 놓쳤습니다. 모든 파일은 int "/"에 넣어졌습니다. – Francisco