나는 복수 스레드가 때때로 동결되는 (분명히 동시에) 스레드가 여러 개있는 threading
- 스레드가있는 python 스크립트가 있습니다. 이 스크립트에서는 실행중인 모든 스레드에서 스택 추적을 덤프하는 신호 처리기를 등록했습니다. 고정되면 덤프 된 스택이 표시되지 않습니다. 무엇이 이것을 일으킬 수 있습니까?파이썬 등록 신호를 무시할 수있는 원인은 무엇입니까?
마음에 와서 가능성의 몇 가지 : 스레드가하는 mutex
해제를 획득하려고 다른 스레드를 동결되지
- . 그러나이 경우 신호 처리기가 작동 할 것으로 기대합니다. 나는 틀린가?
stdout
및stderrr
에 여러 가지 로그를 기록하며 bash 명령 줄을 사용하여 로그 파일로 리디렉션됩니다. 아마도 2 스레드의 정확한 시간 출력이 OS 수준에서 차단 될 수 있습니까? 이 스크립트는 문제없이 몇 달 동안 실행되었습니다. 최근에 커널 업데이트가 있었지만 (우분투 12.04입니다). 이 경우, 신호가 무시되지 않고 그냥 출력을 생성하지 않습니다 ...- 나는 동결 스레드에 의해 읽고 쓰여지는 몇 가지 전역 변수가 있습니다. 나는 파이썬 2.7이이 것을 안전하게하기 위해 글로벌 쓰레드 락을 가지고 있다고 생각했으며, 이전에는 문제가되지 않았다.
어쨌든 신호의 특성으로 인해 작동하지 않아야합니까? – zneak
@zneak : Python 코드는 매우 안전하지 않기 때문에 신호 처리기에서 Python 코드를 실행할 수 없습니다. 그래서, 파이썬은 메인 쓰레드가 실행될 때까지 신호 작업을 연기합니다. 주 스레드는 바이트 코드 명령어를 페치하려고 시도 할 때 보류중인 호출을 실행합니다. – nneonneo