2009-10-08 4 views
1

다음 코드는 Trace/BPT trap과 함께 종료됩니다.파이썬 스레딩 모듈을 사용한 Trace/BPT 트랩

from tvdb_api import Tvdb 
from threading import Thread 

class GrabStuff(Thread): 
    def run(self): 
     t = Tvdb() 

def main(): 
    threads = [GrabStuff() for x in range(1)] 
    [x.start() for x in threads] 
    [x.join() for x in threads] 

if __name__ == '__main__': 
    main() 

이 오류는 Tvdb()로 인해 발생하지만 이유는 알 수 없습니다.

python -m pdb thescript.py python -m pdb thescript.py으로 코드를 실행하고 코드를 밟았습니다. 다음 줄 뒤에 코드가 나타납니다 :

> .../threading.py(468)start() 
-> _active_limbo_lock.acquire() 
(Pdb) 
> .../threading.py(469)start() 
-> _limbo[self] = self 
(Pdb) 
> .../threading.py(470)start() 
-> _active_limbo_lock.release() 
(Pdb) 
> .../threading.py(471)start() 
-> _start_new_thread(self.__bootstrap,()) 
(Pdb) 
> .../threading.py(472)start() 
-> self.__started.wait() 
(Pdb) Trace/BPT trap 

(threading.py의 전체 경로를 ...로 바꿨습니다)

동일한 문제점이 2.6.12.5.4에서 발생합니다. 컴퓨터가 OS X 10.6.1 Snow Leopard에서 실행 중입니다. tvdb_api 코드는 github.com/dbr/tvdb_api

에서 찾을 수 있습니다.
+0

https://github.com/dbr/tvdb_api는 404입니다. http로 변경해야했습니다. –

+1

이 파이썬 모듈 안에 Rakefile (Ruby)이 있다는 사실은 내가 심각하게 질문을 던지게하지만, 위의 코드를 리눅스에서 실행할 때 어떤 경우에도 오류가 발생하지는 않는다. (실제) 디버거에서 실행하여 "추적/BPT 트랩"에서 백 트레이스를 얻는 지 확인하십시오. 당신은 Tvdb .__ init__의 블록을 주석 처리하여 원인을 좁힐 수 있는지 확인할 수도 있습니다. –

+0

@Glenn : Heh, Rakefile을 사용하는 것이 Makefile이나 쉘 스크립트를 사용하여 배포를 자동화하는 것과 다른 점을 나는 안다. 나는 Pyke 나 Python'y를 사용했을 것이다. 그러나 그들 중 누구도 설치하지 않았다. OS X의 기본 설정 (레이크가있는 반면) – dbr

답변

3

에서 찾을 수 있습니다. OS X 10.6의 스레드에서 모듈을 처음 가져올 때 문제가 발생할 수 있습니다. 예를 들어, this issue을 참조하십시오. 이 문제를 해결하려면 Tvdb를 살펴보고 전체 가져 오기 체인을 기본 모듈에 추가하십시오.

+0

이상한 ... Tvdb()를 스레드 외부에서 (즉, 가져 오기 바로 아래 또는'main()'에서) 초기화하면 충돌을 방지 할 수 있습니다. – dbr