Python threading.Thread()返回NoneType?

时间:2016-04-18 00:45:31

标签: python multithreading

我正在开发一个小应用程序,我知道它将有3个独立于主线程的线程,在某些时候,我需要从另一个线程中识别一个线程。假设线程为ABC。如果发生任何事情,A将需要加入C。我试图在启动它们之前将线程添加到字典中,因此我可以稍后识别线程C

currentThreads['A'] = threading.Thread(target=func, args=[]]).
currentThreads['A'].start()
currentThreads['B'] = threading.Thread(target=func, args=[]).start()
currentThreads['B'].start()

行为很奇怪:有时两个currentThreads[key].start()都会产生AttributeError: 'NoneType' object has no attribute 'start',有时只会产生currentThreads['B'].start()

有任何线索可能会发生这种情况吗?

2 个答案:

答案 0 :(得分:1)

这是因为start返回None所以:

currentThreads['B'] = threading.Thread(target=func, args=[]).start()

currentThreads['B']None,因此调用currentThreads['B'].start()会引发AttributeError

答案 1 :(得分:1)

我建议你,为了保持你的线程的引用名称,实际上给它们起名字,如下:

t = threading.Thread(name='my_service', target=func)

然后,当您需要检查线程的名称时,只需使用getName()获取其名称:

current_thread_name =  threading.currentThread().getName()