使用Python线程模块时出现Trace/BPT陷阱
以下代码出现了 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.1
和 2.5.4
版本中也出现了同样的问题。我的机器运行的是 OS X 10.6.1 Snow Leopard。你可以在 github.com/dbr/tvdb_api 找到 tvdb_api
的代码。
1 个回答
3
在OS X 10.6系统中,当你第一次在一个线程里导入模块时,可能会遇到一些麻烦。比如,可以参考这个问题。作为解决方法,你可以试着查看Tvdb,并把它所有需要的模块都添加到主模块里。