使用Python线程模块时出现Trace/BPT陷阱

1 投票
1 回答
1272 浏览
提问于 2025-04-15 14:56

以下代码出现了 Trace/BPT trap 的错误:

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 运行了代码,并逐行调试,发现错误发生在以下几行之后:

> .../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。你可以在 github.com/dbr/tvdb_api 找到 tvdb_api 的代码。

1 个回答

3

在OS X 10.6系统中,当你第一次在一个线程里导入模块时,可能会遇到一些麻烦。比如,可以参考这个问题。作为解决方法,你可以试着查看Tvdb,并把它所有需要的模块都添加到主模块里。

撰写回答