我正在开发一个小应用程序,我知道它将有3个独立于主线程的线程,在某些时候,我需要从另一个线程中识别一个线程。假设线程为A
,B
,C
。如果发生任何事情,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()
。
有任何线索可能会发生这种情况吗?
答案 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()